小编典典

Oracle-比较列的默认值

sql

我试图识别具有默认值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的列


阅读 42

收藏
2021-04-28

共1个答案

小编典典

在oracle中(至少11g),如果您不为列提供默认值,就好比给它null

看这个例子


更新 感谢@pratik garg的评论,现在我了解到您所要求的是一种查询long列的方法。
由于如@PratikGrag所述,当您定义defualt nullLONG列时DATA_DEFAULT将包含’null’。

由于USER_TAB_COLUMNS没有可用的ROWID,因此我想到的唯一方法是使用PLSQL。

像这样的东西:

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;
2021-04-28