2

デフォルト値が 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 である列を取得していません

4

4 に答える 4

5

次のクエリでも試すことができます-

WITH xml AS (
         SELECT XMLTYPE(
                    DBMS_XMLGEN.GETXML('SELECT table_name, column_name ,DATA_DEFAULT FROM user_tab_cols')
                    ) AS xml
          FROM   dual
          )
SELECT * FROM ( 
 SELECT extractValue(xs.object_value, '/ROW/TABLE_NAME')       AS table_name
  ,      extractValue(xs.object_value, '/ROW/COLUMN_NAME')      AS column_name
  ,      extractValue(xs.object_value, '/ROW/DATA_DEFAULT')  AS DATA_DEFAULT
  FROM   xml x
  ,      TABLE(XMLSEQUENCE(EXTRACT(x.xml, '/ROWSET/ROW'))) xs
  ) WHERE (DATA_DEFAULT IS NULL OR UPPER(DATA_DEFAULT) = 'NULL')
;

上記のクエリには、結果を得るのにより多くの時間を費やす必要があるという問題がありますが、期待どおりの正しい結果が得られます。

于 2013-04-10T07:21:41.683 に答える
4

Oracle (少なくとも 11g の場合) では、列にデフォルト値を指定しない場合、それを指定するようなものnullです。

この例を参照してください


UPDATE @pratik gargのコメントのおかげで、あなたが本当に求めているのは、long列を照会する方法であることがわかりました。LONG列
を定義するときに@PratikGragが述べたように、「null」が含まれます。 defualt nullDATA_DEFAULT

使用可能な ROWID がないためUSER_TAB_COLUMNS、考えられる唯一の方法は 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;
于 2013-04-10T06:16:52.757 に答える
0

がある、

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 OR LENGTH(CL.DATA_DEFAULT || '') < 1 )

ORDER  BY t.table_name
于 2013-04-10T06:17:54.200 に答える
0

Empty は NULL であることを意味し、同じことを意味します...

于 2013-04-10T06:17:59.443 に答える