oracle中是否存在任何不支持null值的数据类型,而不指定非null或key constriants之类的约束

时间:2017-09-19 07:58:46

标签: sql oracle sqldatatypes

  1. 我只想知道sql或oracle中是否有任何数据类型在不指定null或任何键约束(如主键)的情况下不接受空值。

  2. 外键是否接受空值。

3 个答案:

答案 0 :(得分:0)

首先,我有一个问题:" sql或oracle中的任何数据类型" 。那是什么意思? Sql Server还是Oracle?无论如何,回答你的问题: 1)每个数据类型都支持null,除非它们具有非null约束。

2)外键接受空值。

答案 1 :(得分:0)

  1. 所有数据类型都允许为空。
  2. 是外键可以为null。您需要这个来获取可选信息。假设您有订单和发票。订单表具有发票ID,但是稍后写入发票时,订单的发票ID首先为空,但稍后必须包含发票表中的ID。

答案 2 :(得分:0)

不在SQL中,但您可以在PL / SQL中定义自己的子类型,并指定它们不接受NULL值,然后在您的过程中使用它:

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

然后,您可以在过程中使用它们,而无需在过程签名中重新声明它们是NOT 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;
/ 

使用NULL值调用该过程:

BEGIN
  test_pkg.print_value( NULL );
END;
/

抛出:

PLS-00567: cannot pass NULL to a NOT NULL constrained formal parameter