为什么我的PL / SQL过程会编译错误

时间:2015-07-06 19:37:05

标签: sql oracle oracle11g

正在处理这段代码3天。在程序上阅读本书两章并没有多大帮助。没有任何参考代码块作为示例。这些显然是完成这些步骤的完美范例。无论哪种方式,我都希望有人评论我的代码并告诉我为什么它不会编译。

我要做的是使用(IN和OUT参数)验证付款信息接受入住的ID并返回三个值(捐赠金额,如果按时支付,如12个月和剩余余额的话,捐赠总额到目前为止) 。希望有人能够帮助我。我已经阅读了Oracle docs网站,但我仍然对这些程序感到失望。

我的代码:

CREATE OR REPLACE PROCEDURE DDCKBAL_SP
(pl_id  IN dd_pledge.idpledge%TYPE,
pl_amount OUT NUMBER,
pay_to_date OUT NUMBER,
p_balance OUT NUMBER)

IS
pay_amount      dd_payment.payamt%TYPE; --variable to calculate pay
pay_months      dd_pledge.paymonths%TYPE; --variable for calculations

BEGIN
SELECT  pledgeamt, pay_amount --Edited here
INTO pl_amount, pay_to_date  --Edits here
FROM dd_pledge 
WHERE idpledge = pl_id;

IF pay_months = 0 THEN
pay_to_date := pl_amount; 
ELSE pay_to_date := pl_amount *(pl_amount/pay_months);
p_balance := pl_amount - pay_to_date;
END IF;

END DDCKBAL_SP;

/* The above now compiles, however when I run a test I receive the total 
 amount pledged but nothing for paid_to_date (if pledge was for 1200 
 over 12 payments wouldn't it be $20 a month up to current date?

 I'm not receiving output for balance either...Starting to get the hang
of this but still need a bit of help with explanations */

1 个答案:

答案 0 :(得分:1)

&用于SQL Plus替换功能,应用程序在将值发送到Oracle服务器之前会提示您输入值。您正在寻找变量绑定,并且正在寻找:

例如,from the Oracle docshttp://docs.oracle.com/cd/B10501_01/appdev.920/a96584/oci05bnd.htm

您也可能不需要绑定,但您需要转储&

CREATE OR REPLACE PROCEDURE procOneINOUTParameter(genericParam IN OUT VARCHAR2)
IS
BEGIN

  genericParam := 'Hello World INOUT parameter ' || genericParam;

END;

如果您想了解绑定变量,look here。它允许你节省解析,但是现在我认为思考比你需要的更复杂。

  

绑定变量允许多次重复使用单个SQL语句(无论是查询还是DML),这有助于提高安全性(通过禁止SQL注入攻击)和性能(通过减少所需的解析量)。