【发布时间】:2012-05-11 15:01:26
【问题描述】:
我创建这样的准布尔列:
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() 需要一个字符类型,但我不知道如何解决这个问题。
我这样做的方式是否正确?如果是这样,我该如何解决我遇到的错误?如果没有,有什么更好的方法?
【问题讨论】:
-
我很抱歉,Stack Overflow 在提交和编辑时给了我错误。这是一个真正的问题,我发誓:(
-
它似乎不喜欢我的
CREATE TABLE查询周围的括号()... ???? -
我个人更喜欢 CHAR(1) 约束为 NOT NULL CHECK(colname IN ('Y', 'N'))。 IMO 编号很容易以 CHAR 字段没有的方式被滥用。 YMMV。