我创建这样的准布尔列:
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_condition
数据类型是LONG
,并且REGEXP_LIKE()
需要一个字符类型,但我不知道如何解决这个问题。
我会以正确的方式解决这个问题吗?如果是这样,我该如何解决我遇到的错误?如果没有,有什么更好的方法来做到这一点?