使用 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;