Oracle存储过程的"Boolean"参数

Jay*_*y S 12 oracle parameters boolean

我知道Oracle没有用于参数的布尔类型,并且我目前正在使用NUMBER类型,其中1/0为True/False(而不是'Y'/'N'CHAR(1)方法).

我不是一个非常高级的Oracle程序员,但在做了一些挖掘和阅读一些ASKTOM帖子后,似乎你可以使用列的格式来限制字段,如:

MyBool NUMBER(1) CHECK (MyBool IN (0,1))

有没有办法将相同类型的检查约束应用于存储过程的输入参数?我想将可能的输入限制为0或1,而不是在收到输入后明确检查它.

Ton*_*ews 30

可以使用布尔值作为存储过程的参数:

procedure p (p_bool in boolean) is...
Run Code Online (Sandbox Code Playgroud)

但是你不能在SQL中使用布尔值,例如select语句:

select my_function(TRUE) from dual; -- NOT allowed
Run Code Online (Sandbox Code Playgroud)

对于数字参数,无法以声明方式向其添加"检查约束",您必须编写一些验证,例如

procedure p (p_num in number) is
begin
   if p_num not in (0,1) then
      raise_application_error(-20001,'p_num out of range');
   end if;
   ...
Run Code Online (Sandbox Code Playgroud)

  • 是的,PL/SQL 会起作用。数据库中列的数据类型不支持布尔值,并且根本不能在 SQL 查询中使用。 (2认同)