Параметр "Boolean" для хранимой процедуры Oracle
Я знаю, что Oracle не имеет логического типа для использования для параметров и в настоящее время принимает тип числа, который имел бы 1/0 для True/False (вместо подхода " Y " / " N " CHAR(1)).
Я не очень продвинутый программист Oracle, но после некоторого рытья и чтения некоторых сообщений ASKTOM, похоже, вы можете ограничить поле, используя формат для столбца, например:
MyBool NUMBER(1) CHECK (MyBool IN (0,1))
есть ли способ применить тот же вид проверки ограничение входного параметра хранимой процедуры? Я хотел бы ограничить возможные входы 0 или 1, а не проверять его явно после получения ввода.
2 ответов
вы can используйте логические значения в качестве параметров хранимых процедур:
procedure p (p_bool in boolean) is...
однако вы не можете использовать логические значения в SQL, например, инструкции select:
select my_function(TRUE) from dual; -- NOT allowed
для параметра number нет способа декларативно добавить к нему" контрольное ограничение", вам придется закодировать некоторую проверку, например
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;
тогда вы не получите ошибку