在程序的编译测试期间收到错误
Receiving error during compile test of procedure
我写了一个简短的程序,当输入捐助者 ID 时,它会根据状态字段(数据类型 10 的 NUMBER 处于活动状态,20 已完成)检查活动承诺,并每月付款 return 布尔值 如果满足所有条件则为 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;
DBMS_OUTPUT.PUT_LINE('Active Pledge and paymonths: ' || 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>
我写了一个简短的程序,当输入捐助者 ID 时,它会根据状态字段(数据类型 10 的 NUMBER 处于活动状态,20 已完成)检查活动承诺,并每月付款 return 布尔值 如果满足所有条件则为 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;
DBMS_OUTPUT.PUT_LINE('Active Pledge and paymonths: ' || 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>