我试图识别具有默认值NULL或未设置默认值的数据库列。为此,我正在执行查询。
SELECT T.TABLE_NAME,CL.COLUMN_NAME,CL.DATA_DEFAULT FROM SYS.USER_TABLES T JOIN SYS.USER_TAB_COLUMNS CL ON T.TABLE_NAME = CL.TABLE_NAME WHERE CL.DATA_DEFAULT IS NULL ORDER BY t.table_name
在此查询的输出中,我正在获取未设置默认值(空)的列,但是我没有在获取默认值是NULL的列
在oracle中(至少11g),如果您不为列提供默认值,就好比给它null。
null
看这个例子
更新 感谢@pratik garg的评论,现在我了解到您所要求的是一种查询long列的方法。 由于如@PratikGrag所述,当您定义defualt nullLONG列时DATA_DEFAULT将包含’null’。
long
defualt null
DATA_DEFAULT
由于USER_TAB_COLUMNS没有可用的ROWID,因此我想到的唯一方法是使用PLSQL。
USER_TAB_COLUMNS
像这样的东西:
BEGIN FOR rec IN (SELECT T.TABLE_NAME,CL.COLUMN_NAME,CL.DATA_DEFAULT FROM SYS.USER_TABLES T JOIN SYS.USER_TAB_COLUMNS CL ON T.TABLE_NAME = CL.TABLE_NAME ORDER BY t.table_name) LOOP IF rec.DATA_DEFAULT = 'null' THEN dbms_output.put_line(rec.table_name || ' ' || rec.COLUMN_NAME); END IF; END LOOP; END;