使用out参数调用Function时获取Oracle Error ORA-06572

时间:2016-01-10 08:31:38

标签: oracle function call

我已经多次尝试在具有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;

1 个答案:

答案 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;