Oracle: Как определить, является ли столбец «логическим»?

Я создаю квазибулевы столбцы следующим образом:

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

В настоящее время я очищаю user_tab_columnsи хотел бы иметь возможность определить, является ли данный столбец логическим или нет. На данный момент у меня есть это:

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_conditionLONGи REGEXP_LIKE()ожидает символьный тип, но я не знаю, как решить эту проблему.

Правильно ли я делаю это? Если да, то как исправить ошибку, которую я получаю? Если нет, то как лучше это сделать?

0
задан FtDRbwLXw6 11 May 2012 в 15:06
поделиться