Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;布尔值;Oracle存储过程的参数_Oracle_Parameters_Boolean - Fatal编程技术网

&引用;布尔值;Oracle存储过程的参数

&引用;布尔值;Oracle存储过程的参数,oracle,parameters,boolean,Oracle,Parameters,Boolean,我知道Oracle没有用于参数的布尔类型,并且目前正在采用1/0表示真/假的数字类型(而不是'Y'/'N'字符(1)方法) 我不是一个非常高级的Oracle程序员,但在做了一些挖掘和阅读了一些ASKTOM文章之后,似乎可以使用以下列的格式限制字段: MyBool编号(1)检查(MyBool输入(0,1)) 有没有一种方法可以将相同类型的检查约束应用于存储过程的输入参数?我希望将可能的输入限制为0或1,而不是在收到输入后显式检查它。您可以使用布尔值作为存储过程的参数: procedure p (p

我知道Oracle没有用于参数的布尔类型,并且目前正在采用1/0表示真/假的数字类型(而不是'Y'/'N'字符(1)方法)

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

MyBool编号(1)检查(MyBool输入(0,1))


有没有一种方法可以将相同类型的检查约束应用于存储过程的输入参数?我希望将可能的输入限制为0或1,而不是在收到输入后显式检查它。

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

procedure p (p_bool in boolean) is...
但是,不能在SQL中使用布尔值,例如select语句:

select my_function(TRUE) from dual; -- NOT allowed
对于数字参数,无法声明性地向其添加“检查约束”,您必须编写一些验证代码,例如

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;
   ...
是和否。 你可以做

create or replace package t_bool is
  subtype t_bool_num IS PLS_INTEGER RANGE 0..1;
  function f_test (i_bool_num t_bool_num) return varchar2;
end t_bool;
/

create or replace package body t_bool is
  function f_test (i_bool_num t_bool_num) return varchar2 is
  begin
    if i_bool_num = 0 then 
      return 'false';
    elsif i_bool_num = 1 then
      return 'true';
    elsif i_bool_num is null then
      return 'null';
    else
      return to_char(i_bool_num);
    end if;
  end;
end t_bool;
/
好消息是,如果你这样做了

exec dbms_output.put_line(t_bool.f_test(5));
select t_bool.f_test(5) from dual;
它报告了一个错误

坏消息是如果你这么做了

exec dbms_output.put_line(t_bool.f_test(5));
select t_bool.f_test(5) from dual;

那么你就不会出错了

嗨,托尼,请原谅我对“布尔”类型的无知。我一定是看错了我看到的关于它的评论。我原以为Oracle不支持它,但这可能只是针对字段类型。只是再检查一下,下面的代码确实适用于该类型,对吗?如果(p_bool),那么v_MyDisplayString='我成功了!';如果结束;是的,PL/SQL可以工作。数据库中列的数据类型不支持布尔值,在SQL查询中根本不能使用布尔值。