2

Oracle データベースでこのクエリを実行すると、次のようになります。

SELECT COLUMN_NAME, 
       DATA_DEFAULT, 
       DATA_TYPE
  FROM USER_TAB_COLUMNS
 WHERE TABLE_NAME = 'MY_TABLE' 
   AND DATA_DEFAULT IS NOT NULL;

私が得ている結果は次のとおりです。

STOICHIOMETRY   NULL    NUMBER

私の質問はなぜですか?私はNULLではないことを求めました。

私が実行した場合:

describe MY_TABLE

私は得る:

Name          Null     Type         
------------- -------- ------------ 
TID           NOT NULL NUMBER(9)    
COMPONENT_ID  NOT NULL NUMBER(9)    
RELATIONSHIP  NOT NULL VARCHAR2(20) 
STOICHIOMETRY          NUMBER(3)    
TARGCOMP_ID   NOT NULL NUMBER(9)    
HOMOLOGUE     NOT NULL NUMBER(1)
4

3 に答える 3

2

列の null 可能性は、NULLABLEではなく に格納されDATA_DEFAULTます。は列のデフォルト値を格納します (ステートメントでDATA_DEFAULTデフォルト値を指定していない場合は、すべての列が取得されます(null 非許容の列も含まれます!)CREATE TABLEDEFAULT NULL

試す:

SELECT COLUMN_NAME, 
       DATA_DEFAULT, 
       DATA_TYPE,
       NULLABLE
  FROM USER_TAB_COLUMNS
 WHERE TABLE_NAME = 'MY_TABLE' 
   AND NULLABLE = 'N';              -- 'N' means No, not nullable
                                    -- 'Y' means Yes, nullable
于 2013-09-18T14:43:46.740 に答える
1

NULL がデフォルト値だと思いますか?たとえば、テーブルがあり、デフォルト値を NULL に変更しました。

ALTER TABLE UNIQUEVALTEST MODIFY ZIP DEFAULT NULL;

今私が選択したとき:

SELECT COLUMN_NAME, DATA_DEFAULT
FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'UNIQUEVALTEST'
AND data_default IS NOT NULL;

私は得る:

ZIP NULL

編集:よりよく説明するために、フィールドが(null)の場合、デフォルト値はありません。ただし、デフォルト値は NULL に設定されているため、特に指定しない限り、挿入された新しいデータは自動的に NULL になります。それが機能をまったく変更するかどうか(デフォルト値がないか、デフォルト値がNULLに設定されているか)はわかりませんが、同じように動作すると思います。

于 2013-09-18T14:39:41.657 に答える