尝试使用下面的SQL脚本实现每天运行一次的脚本:
UPDATE WO_OPERATION wo_sub
SET wo_sub.DUE_DATE = (SELECT wo_main.DUE_DATE
FROM WO_OPERATION wo_main, WO_BOM wob
WHERE wob.WOO_AUTO_KEY = wo_main.WOO_AUTO_KEY
AND wob.WOB_AUTO_KEY = wo_sub.WOB_AUTO_KEY),
wo_sub.MANUAL_ECD = (SELECT wo_main.MANUAL_ECD
FROM WO_OPERATION wo_main, WO_BOM wob
WHERE wob.WOO_AUTO_KEY = wo_main.WOO_AUTO_KEY
AND wob.WOB_AUTO_KEY = wo_sub.WOB_AUTO_KEY)
WHERE wo_sub.WOB_AUTO_KEY > 0
AND wo_sub.OPEN_FLAG = 'T'
在Interactive SQL中手动运行SQL脚本时,不会出现错误。
创建过程并使用“executer procedure”运行后,将出现以下错误:
错误代码:
ORA-06550:第1行,第12列:PLS-00905:对象QCTL.UPDATE_SUBORDER_DUE_DATES无效
ORA-06550:第1行,第7列:PL/SQL:忽略语句
ORA-06512:在“QCTL.QC_SCHED_CUST_PKG”,第1632行
ORA-06512:第1行
ORA-06512:在“DBMS_ISCHED”,第185行
ORA-06512:在“DBMS_SCHEDULER”,第486行
ORA-06512:在“QCTL.QC_EMGR_PKG”,第1471行
ORA-06512:第2行
PL/SQL:ORA-00933:SQL命令未正确结束
第3列第6行编译错误
PL/SQL:SQL语句被忽略
第1列第5行编译错误
以下是程序:
CREATE OR REPLACE procedure QCTL.UPDATE_SUBORDER_DUE_DATES as
Begin
UPDATE WO_OPERATION wo_sub SET wo_sub.DUE_DATE = (select wo_main.DUE_DATE from WO_OPERATION wo_main, WO_BOM wob where wob.WOO_AUTO_KEY = wo_main.WOO_AUTO_KEY and wob.WOB_AUTO_KEY = wo_sub.WOB_AUTO_KEY), wo_sub.MANUAL_ECD = (select wo_main.MANUAL_ECD from WO_OPERATION wo_main, WO_BOM wob where wob.WOO_AUTO_KEY = wo_main.WOO_AUTO_KEY and wob.WOB_AUTO_KEY = wo_sub.WOB_AUTO_KEY) where wo_sub.WOB_AUTO_KEY > 0 and wo_sub.OPEN_FLAG = 'T'
commit;
END;
这应该适用于一个工作订单的到期日在维修设施的所有子woorkorders,我需要自动运行在每天的某个时间。
当手动运行SQL脚本时,没有错误...
编译整个过程会导致以下错误:
PL/SQL:ORA-00933:SQL命令未正确结束
第3列第6行编译错误
PL/SQL:SQL语句被忽略
第1列第5行编译错误
我做错了什么?
1条答案
按热度按时间ylamdve61#
实际上,这个过程中有一个错误。每个语句都必须以分号字符正确终止。
UPDATE
不是;因此出现了错误。过程已创建,但未成功(您应该注意Oracle报告的消息)。
**[编辑]**在您评论您得到ORA-00933错误后;在这种情况下,你做错了,因为在我代码中没有这样的错误。
这里有一个演示。
示例表(因为你没有发布自己的信息;下一次,请提供尽可能多的信息,以便我们不必猜测):
程序:
程序已创建。没有ORA-00933什么都没有重新检查自己的代码。