ORACLE APEX PL SQL 过程错误
Posted
技术标签:
【中文标题】ORACLE APEX PL SQL 过程错误【英文标题】:ORACLE APEX PL SQL Procedure Error 【发布时间】:2015-05-26 13:06:42 【问题描述】:我不断收到错误:编译错误成功。我的代码做错了什么?我在 sqlfiddle 中尝试过,但我得到一个无效的 SQL 语句错误。据我所知,这是 PL/SQL 的正确语法
create or replace PROCEDURE PRC_CALC
(W_ORDERID_IN IN NUMBER)
AS
W_PARTSERVICEID VARCHAR2(10);
W_EXIST_FLAG NUMBER(1) :=0;
W_SUBTOTAL NUMBER(9) :=0;
W_TAX NUMBER(9) :=0.07;
W_DISCOUNT NUMBER(9) :=0;
W_TOTAL NUMBER(9) :=0;
BEGIN
SELECT COUNT(*)
INTO W_EXIST_FLAG
FROM tblJobOrders
WHERE fldOrderId = W_ORDERID_IN;
IF W_EXIST_FLAG = 1 THEN
CURSOR CUR_ORDERCHARGES IS
SELECT fldPartServiceId
FROM tblOrderCharges
WHERE fldOrderId = W_ORDERID_IN;
OPEN CUR_ORDERCHARGES;
LOOP
FETCH CUR_ORDERCHARGES
INTO W_PARTSERVICEID
EXIT WHEN CUR_ORDERCHARGES%NOTFOUND;
SELECT fldPartServiceAmount, fldDiscountPercent
INTO W_SUBTOTAL, W_DISCOUNT
FROM tblPartsServices
WHERE fldPartServiceId = W_PARTSERVICEID;
W_DISCOUNT := (W_SUBTOTAL*(W_DISCOUNT*.01));
W_TAX := (W_TOTAL*W_TAX);
W_TOTAL := W_SUBTOTAL - W_DISCOUNT;
W_TOTAL := W_TOTAL + W_TAX;
htp.prn('Your subtotal is: $' ||W_SUBTOTAL||'<br>');
htp.prn('Your Discount is: $' ||W_DISCOUNT||'<br>');
htp.prn('Your Tax is: $' ||W_TAX||'<br>');
htp.prn('Your Total is: $' ||W_TOTAL||'<br>');
END LOOP;
CLOSE CUR_ORDERCHARGES;
ELSE
htp.prn('The Order Id: '||W_ORDERID_IN||' does not exist in the database');
END IF;
END;
【问题讨论】:
您可以在 SQLPlus 中编译您的过程后使用SHOW ERR
以获取有关错误的更多信息。
【参考方案1】:
你的变量声明需要工作
W_PARTSERVICEID VARCHAR2;应该有一个大小,例如 W_PARTSERVICEID VARCHAR2(250);
你的数字声明会起作用,但最好也指定一个大小
W_EXIST_FLAG NUMBER;应该是 W_EXIST_FLAG NUMBER(9);
W_EXIST_ORDER_FLAG 未声明,也应该声明。
作为超出您的问题的编程实践,您应该检查进入过程和光标中的值是否不为空或零。
CURSOR CUR_ORDERCHARGES 应与其他声明一起声明或放入新的 DECLARE BEGIN END 块中
你在you FETCH the cursor时少了一个分号,应该是
FETCH CUR_ORDERCHARGES
INTO W_PARTSERVICEID;
EXIT WHEN CUR_ORDERCHARGES%NOTFOUND;
【讨论】:
根据您指定的更改,我仍然收到相同的错误ORA-24344: success with compilation error
【参考方案2】:
第一个查询中使用的 W_EXIST_ORDER_FLAG 未定义。也许,你的意思是 W_EXIST_FLAG?
【讨论】:
以上是关于ORACLE APEX PL SQL 过程错误的主要内容,如果未能解决你的问题,请参考以下文章
PL/SQL 中的问题 = 错误堆栈:ORA-01403:Oracle Application Express (APEX) 中没有数据