2017-09-19 4 views
-1
  1. これは、指定しなくてもnull値を受け入れないデータ型nullまたは主キーのようなキー制約。null以外の値やキー制約などの制約を指定せずにnull値をサポートしないOracleのデータ型はありますか

  2. 外部キーはNULL値を受け入れますか?

+2

[ Coddの12のルール](https://en.wikipedia.org/wiki/Codd%27s_12_rules)を参照すると、SQLデータベース製品がルール3に違反すると驚くことでしょう。 –

答えて

0

まず、「SQLまたはOracleの任意のデータ型」とはどういう意味ですか? SQL ServerまたはOracle?それにもかかわらず、あなたの質問に答えて: 1)すべてのデータ型は、null以外の制約がある場合を除き、nullをサポートします。

2)外部キーはNULL値を受け入れます。

0
  1. すべてのデータ型でnullが許されます。
  2. はい外部キーはnullでもかまいません。オプションの情報についてはこれが必要です。注文と請求書があるとしましょう。注文テーブルには請求IDがありますが、請求書が後で書き込まれるため、注文の請求書​​IDは最初はnullですが、後で請求書テーブルにIDが含まれている必要があります。
SQLで
0

ないが、あなたは、PL/SQLで独自のサブタイプを定義し、それらがNULL値を受け入れ、その後、あなたの手順でそれを使用しないことを指定することができます。

CREATE PACKAGE types_pkg IS 
    SUBTYPE MY_BYTE IS NUMBER(3,0) NOT NULL; 
END; 
/

そして、あなたがそれらを使用することができます手続き署名内にNOT NULLであることを再宣言しない手続き。 NULL値とプロシージャを呼び出す

CREATE PACKAGE BODY test_pkg IS 
    PROCEDURE print_value(
    value TYPES_PKG.MY_BYTE 
); 
END; 
/

CREATE PACKAGE BODY test_pkg IS 
    PROCEDURE print_value(
    value TYPES_PKG.MY_BYTE 
) 
    IS 
    BEGIN 
    DBMS_OUTPUT.PUT_LINE(value); 
    END; 
END; 
/

BEGIN 
    test_pkg.print_value(NULL); 
END; 
/

例外:SQLは、リレーショナルデータベースの試みであり、リレーショナルデータベースは周りに基づくことを意味するので

PLS-00567: cannot pass NULL to a NOT NULL constrained formal parameter 
関連する問題