使用 out 参数调用函数时出现 Oracle 错误 ORA-06572
Getting Oracle Error ORA-06572 when calling Function with out parameter
我尝试了很多次调用带有 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;
你的函数中没有引用游标,它是一个简单的值select。
如果你的函数有一个 OUT
参数,你不能在 SQL 语句中使用它(这就是你得到 ORA-06572 的原因)。我什至不确定您是如何尝试使用它的。 select GET_NUMBER_TYPE(1, ...) from dual
中的第二个参数怎么设置?
您忽略了异常。这不是一件好事,但会导致您进行长时间的调试。
你的函数中没有 return
任何东西。函数应该总是 return 东西,否则你会得到一个错误。
事实上,你甚至不需要OUT
参数,只需要return你select.
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;
我尝试了很多次调用带有 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;
你的函数中没有引用游标,它是一个简单的值select。
如果你的函数有一个
OUT
参数,你不能在 SQL 语句中使用它(这就是你得到 ORA-06572 的原因)。我什至不确定您是如何尝试使用它的。select GET_NUMBER_TYPE(1, ...) from dual
中的第二个参数怎么设置?您忽略了异常。这不是一件好事,但会导致您进行长时间的调试。
你的函数中没有
return
任何东西。函数应该总是 return 东西,否则你会得到一个错误。事实上,你甚至不需要
OUT
参数,只需要return你select.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;