1

我写了一个简短的程序,当输入捐赠者 ID 时,它会根据状态字段检查活动承诺(数据类型 10 的 NUMBER 是活动的,20 是完整的)并且每月付款并返回布尔值 True 如果所有条件都满足如果不是,则为 False。在添加 DBMS 输出之前,它可以正常编译,但我收到错误 PLS-00306:调用中的参数数量或类型错误”

自己解决这个问题感觉很好,但不确定我的错误在哪里。还寻找关于异常处理程序的解释(在代码中注释)。提前感谢您的意见和教学点!

我的代码:

CREATE OR REPLACE PROCEDURE DDPAY_SP
     (donor_id IN NUMBER, active_pl OUT BOOLEAN)

IS
      pay_count NUMBER;
BEGIN
      SELECT COUNT(*)
         INTO pay_count
         FROM dd_pledge 
         WHERE iddonor = donor_id AND
               idstatus = 10 AND
               paymonths > 1;

      IF pay_count > 1 THEN
         active_pl := TRUE;
      ELSE active_pl := FALSE;
      END IF;
      DBMS_OUTPUT.PUT_LINE('Active Pledge and paymonths: ' || active_pl);

      /* want to add exception but don't understand how to choose
      the handler for blocks of code that are not the Oracle defined
      exceptions--Can someone explain better than book I have? I know    
      code should be:

      EXCEPTION
      WHEN .....
      DBMS_OUTPUT.PUT_LINE('    ');  */

      END;
4

1 回答 1

4

DBMS_OUTPUT.PUT_LINE('活动承诺和支付月数:' || active_pl);

您不能将BOOLEAN传递给DBMS_OUTPUT。您只能传递字符串参数,即VARCHAR2数据类型。

这就是您收到以下错误的原因:

PLS-00306:wrong number or types of arguments in call"

理想情况下,您不希望将任何内容DBMS_OUTPUT发送给您的客户端,因为您使用的是OUT参数,这就足够了。

如果您真的想打印布尔值,则必须将其转换为 VARCHAR2 数据类型。

例如,

SQL> set serveroutput on
SQL> DECLARE
  2    var_bool BOOLEAN;
  3  BEGIN
  4    var_bool := TRUE;
  5    dbms_output.put_line('Status = '||
  6    CASE
  7    WHEN var_bool THEN
  8      'TRUE'
  9    ELSE
 10      'FALSE'
 11    END);
 12  END;
 13  /
Status = TRUE

PL/SQL procedure successfully completed.

SQL>
于 2015-07-01T10:42:24.040 回答