Oracle 10g 程序编译错误
Posted
技术标签:
【中文标题】Oracle 10g 程序编译错误【英文标题】:Compilation Errors in Procedure of Oracle 10g 【发布时间】:2019-03-05 11:38:48 【问题描述】:我在编译这个函数时收到以下错误:
PROCEDURE HAR.REPORT_INCOME_PROC PLS-00103 的编译错误: 预期以下之一时遇到符号“”
我已经尝试用谷歌搜索,但我不能怪我......
CREATE OR REPLACE PROCEDURE REPORT_INCOME_PROC IS
BEGIN
DELETE FROM HAR.REPORT_INCOME;
INSERT INTO HAR.REPORT_INCOME RI
(RI.INCOME,
RI.AREA,
RI.INCOME_TYPE,
RI.DATA_DATE,
RI.CREATE_DATE,
RI.UPDATE_DATE)
SELECT SUM(YD.HJJE) DRSR,
MDYS.JYDQ SYB,
1,
TRUNC(YD.KDSJ) RQ,
(select sysdate from dual) XZSJ,
(select sysdate from dual) XGSJ
FROM HYDATA.LD_YD YD
LEFT JOIN HYDATA.LD_KHXX KHXX
ON YD.TYRBH = KHXX.KHBH
LEFT JOIN HYDATA.LD_GS GS
ON YD.QYDZBH = GS.GSBH
LEFT JOIN HAR.REPORT_JY_MDYS MDYS
ON YD.QYDZBH = MDYS.GSBH
WHERE YD.KDSJ >= TRUNC(ADD_MONTHS(SYSDATE, -12), 'yy')
AND (YD.YDZT != 5)
AND (YD.CYRQZ != '20000000000000000001' OR YD.CYRQZ IS NULL)
AND (KHXX.KHLB != 4 OR KHXX.KHLB IS NULL)
AND (GS.GSJC NOT LIKE '%F%' OR GS.GSJC IS NULL)
GROUP BY TRUNC(YD.KDSJ), MDYS.JYDQ
ORDER BY MDYS.JYDQ ASC, TRUNC(YD.KDSJ) DESC;
COMMIT;
END;
这是错误
Error: PLS-00103: Encountered the symbol "" when expecting one of the following: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> form current cursor external language Line: 1
【问题讨论】:
这是你的真实代码吗?它应该工作。请复制真实代码。(select sysdate from dual)
没用。就做sysdate AS XZSJ
可能order by
是有罪的。这里不需要。删除它。
在程序中提交是个坏主意。如果您稍后进行回滚,您可能会遇到一些意外。
非常感谢,我会根据建议改进我的代码
【参考方案1】:
您好,我认为您在执行 DML 语句时需要在 PLSQL BLOCK 上使用 EXECUTE IMMEDIATE。
试试这个:
CREATE OR REPLACE PROCEDURE REPORT_INCOME_PROC IS
BEGIN
EXECUTE IMMEDIATE 'DELETE FROM HAR.REPORT_INCOME';
EXECUTE IMMEDIATE 'INSERT INTO HAR.REPORT_INCOME RI <the rest of your codes>';
END;
【讨论】:
好的,我试试看。谢谢!(^_^) 当然,另一方面,您必须在字符串上添加另一个单引号。例如AND (YD.CYRQZ != ''20000000000000000001'' OR YD.CYRQZ IS NULL) .. 还请考虑以前的 cmets 来优化您的查询,例如删除 ORDER BY 等。以上是关于Oracle 10g 程序编译错误的主要内容,如果未能解决你的问题,请参考以下文章