我查了解问题,但没有找到解决方案。我的问题如下
create or replace procedure GETINFO(
pIVR OUT NUMBER
) IS
FUNCTION IS_MASK_ALLOWED(
pBusSeg IN NUMBER,
pCHTPMask IN NUMBER
)
RETURN BOOLEAN
IS
BEGIN
IF pCHTPMask > 0 THEN
ELSE RETURN TRUE;
END IF;
END;
BEGIN
SELECT 1
INTO pIVR
FROM DUAL
WHERE IS_MASK_ALLOWED(1, 2)=TRUE;
END;
编译器说我不能在SQL语句中使用IS_MASK_ALLOWED
ORACLE 10g PL / SQL开发人员7.5
答案 0 :(得分:3)
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表示
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
答案 1 :(得分:0)
你需要将你的is_mask_allowed函数放入一个包中以便在SQL中使用它,你应该从函数中返回一个除布尔值(可能是一个数字)以外的东西并测试它,所以你的SQL更像是: / p>
select my_pkg.is_mask_allowed(1, 2) into pIVR from dual;
以下是Oracle论坛中关于同一错误的最新讨论:
https://forums.oracle.com/forums/thread.jspa?threadID=2319500