2012-05-11 5 views
0

나는 이런 식으로 준 부울 열을 만들 : 나는 현재 user_tab_columns를 근근이 살아가고있어 주어진 열이 부울인지 여부를 판단 할 수 있도록하고 싶습니다Oracle : 열이 "부울"인지 확인하는 방법?

CREATE TABLE foo 
    bar NUMBER(1) DEFAULT 0 NOT NULL CHECK (hide IN (0, 1)) 

.

SELECT column_name, 
     (SELECT COUNT(*) 
     FROM all_constraints 
     WHERE table_name = table_name 
     AND constraint_type = 'C' 
     AND REGEXP_LIKE(search_condition, '^ *' || column_name || ' +IN *\(*0, *1 *\) *$', 'i')) is_boolean 
FROM user_tab_columns; 

그러나 나는 다음과 같은 오류 받고 있어요 : 지금까지, 나는이있어

ORA-00932: inconsistent datatypes: expected NUMBER got LONG 
00932. 00000 - "inconsistent datatypes: expected %s got %s" 
*Cause:  
*Action: 
Error at Line: 6 Column: 31 

나는 search_condition 데이터 유형 LONG 때문에이 것을 배웠고, REGEXP_LIKE() 예상하는 것을 문자 유형이지만이 문제를 해결하는 방법을 모르겠습니다.

나는 올바른 방향으로 가고 있습니까? 그렇다면 어떻게 오류를 수정합니까? 그렇지 않은 경우이 작업을 수행하는 더 좋은 방법은 무엇입니까?

+0

죄송합니다. Stack Overflow는 게시물 제출 및 수정시 오류를 표시합니다. 이것은 진짜 질문이었습니다. ( – FtDRbwLXw6

+0

내 CREATE TABLE 쿼리를 감싸는 괄호'('')'를 좋아하지 않는 것 같습니다 ... ???? – FtDRbwLXw6

+0

개인적으로 나는 CHAR (1)을 선호합니다. IMO 번호는 CHAR 필드가 사용되지 않는 방식으로 오용되기 쉽습니다 .YMMV. –

답변

3

:

COMMENT ON COLUMN foo.bar is 'Boolean'; 
2

예, LONG 데이터 유형은 작업하기가 매우 어렵습니다.

create or replace 
function search_condition 
(p_owner varchar2 
, p_constraint_name varchar2 
) return varchar2 
is 
    l_text long; 
begin 
    select search_condition into l_text from all_constraints 
    where owner = p_owner 
    and constraint_name = p_constraint_name; 
    return l_text; 
end; 

지금 당신은 당신의 쿼리에서이를 사용할 수 있습니다 : 이번 라운드 한 가지 방법은 VARCHAR2로 제약의 검색 조건을 반환하는 함수를 만드는 것입니다

select constraint_name, search_condition from 
(
select constraint_name, search_condition (owner, constraint_name) search_condition 
from all_constraints 
where constraint_type = 'C' 
and owner = 'TONYEOR' 
) 
where ... 
당신은 오라클의 의견을 사용할 수 있습니다
1

응용 프로그램에 따라 다르지만 열 유형, 배율 및 정밀도를 살펴 보는 것으로 충분할 수 있습니다. 나는 number(1)이 오라클 데이터베이스에서 부울 이외에 사용 된 것을 본 적이 없다고 생각합니다.

+0

나는이 케이스를 가지고 있습니다.) (그리고 나는 절대적으로 괜찮습니다.) (NULL이 아닌 CHECK (colname IN ('Y', 'N' 그것은 끔찍한 선택이라는 사실). 하지만 귀하의 답변은 현재 유효한 것으로 보입니다. 예를 들어 .Net 용 Devart 커넥터는 부울 값으로 모든 숫자 (1)을 변환합니다. –

+0

불행히도 부울 데이터가 아닌 여러 개의 NUMBER (1) 열이 있으므로이 특정 응용 프로그램에 대한 안전한 가정은 아닙니다. – FtDRbwLXw6

관련 문제