Oracle не поддерживает логические операторы в SQL, поэтому использование True
не будет работать. Попробуйте select 1 from dual where True = True
для подтверждения.
Во-вторых, если вы никому не позволяете получить доступ к is_mask_allowed
вне вашей процедуры, и это все, что он делает, вы можете сделать это pIVR := 1
. который будет иметь тот же результат, что и ваш код (процедура и функция). Лично, если это где-то рядом со всем, что они делают, я бы все сделал в той же процедуре.
Если вам не хватает какой-либо информации в is_mask_missing
, что then
, после чего ничего не может быть, тогда ваш пакет выдаст ошибку на no_data_found
, так как есть вероятность select 1 from dual where 1 = 0
, которая ничего не возвращает.
Если вы хотите, чтобы is_mask_allowed
был доступен вне вашей процедуры, было бы проще всего поместить его в пакет. Поскольку вы не можете использовать логическое значение, я использовал двоичный файл, где 0 представляет false, а 1 true
create or replace package my_package is
function is_mask_allowed ( pBusSeg IN NUMBER
, pCHTPMask IN NUMBER
) RETURN NUMBER;
procedure get_info ( pIVR out NUMBER );
end my_package;
/
show error
create or replace package body my_package is
function is_mask_allowed ( pBusSeg IN NUMBER
, pCHTPMask IN NUMBER
) RETURN NUMBER is
begin
if pCHTPMask > 0 THEN
-- do something
return 0
else return 1
end if;
end is_mask_allowed;
-----------------------------------
procedure getinfo( pIVR OUT NUMBER ) IS
begin
if is_mask_allowed(1,2) = 1 then
pIVR := 1;
else
pIVR := -- something else;
end if;
end getinfo;
end my_package;
/
show error