我已经多次尝试在具有Out参数的Oracle函数下面调用,每次我得到错误ORA-06572,你能给我最好的方法吗?
FUNCTION GET_NUMBER_TYPE ( P_MSISDN IN NUMBER,
P_CONTRACT_TYPE OUT BCC_CONTRACTS.CONTRACT_TYPE%TYPE)
RETURN BCC_CONTRACTS.CONTRACT_TYPE%TYPE
IS
BEGIN
SELECT CON.CONTRACT_TYPE
INTO P_CONTRACT_TYPE
FROM BCC_CONTRACTS CON, BCC_SUB_NUMBERS SUB
WHERE CON.CONTRACT_NO = P_MSISDN AND SUB.STATUS = 2;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE ('No Data Found');
END GET_NUMBER_TYPE;
答案 0 :(得分:4)
您的函数中没有引用光标,这是一个简单的值选择。
如果你的函数有一个OUT
参数,你就不能在SQL语句中使用它(这就是你得到ORA-06572的原因)。我甚至不确定你是怎么尝试使用它的。您将如何在select GET_NUMBER_TYPE(1, ...) from dual
中设置第二个参数?
您忽略该异常。这不是一件好事,但可以引导你进行一些长时间的调试。
你没有return
你的功能。函数应该总是返回一些东西,否则你会收到错误。
实际上,您甚至不需要OUT
参数,只需返回您选择的内容。
FUNCTION GET_NUMBER_TYPE (P_MSISDN IN NUMBER)
RETURN BCC_CONTRACTS.CONTRACT_TYPE%TYPE
IS
v_contract_type BCC_CONTRACTS.CONTRACT_TYPE%TYPE;
BEGIN
SELECT CON.CONTRACT_TYPE
INTO v_contract_type
FROM BCC_CONTRACTS CON, BCC_SUB_NUMBERS SUB
WHERE CON.CONTRACT_NO = P_MSISDN AND SUB.STATUS = 2;
return v_contract_type;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE ('No Data Found');
return NULL;
END GET_NUMBER_TYPE;