创建Oracle存储过程时出现ORA-00907缺失右括号编译错误求助
解决Oracle存储过程编译错误ORA-00907: missing right parenthesis
我帮你排查了下代码,报错的根源是XMLTABLE子句的语法问题——在PASSING XMLDATA后面少了一个逗号,导致Oracle解析时无法识别COLUMNS子句的起始位置,进而误判为右括号缺失。
修正后的完整存储过程代码
CREATE OR REPLACE PROCEDURE user1.trns (XMLDATA XMLTYPE) IS BEGIN UPDATE table1 SET T$fld1 = 1, T$dat1 = TRUNC(sysdate) -- 这里做了简化,效果和原代码一致 WHERE table1.T$docn IN ( SELECT DISTINCT docn FROM XMLTABLE ('/DataSet/Document/DocumentRow' PASSING XMLDATA, -- 此处添加了缺失的逗号 COLUMNS docn PATH '@DOCN' ) ); COMMIT; END trns; /
关键修正与优化说明
- 补全逗号:Oracle的
XMLTABLE语法要求,PASSING子句传递参数后必须用逗号分隔,才能衔接后续的COLUMNS字段定义,这是你触发报错的直接原因。 - 简化日期处理:你原代码里的
TO_DATE(TO_CHAR(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')可以直接替换成TRUNC(sysdate),两者都能得到当前日期的零时分秒版本,但后者更简洁高效。
后续验证
修正后重新编译存储过程,如果没有报错,就可以测试执行了。如果仍有问题,可以检查传入的XML数据结构是否和你写的XPath/DataSet/Document/DocumentRow匹配,确保@DOCN属性确实存在。
内容的提问来源于stack exchange,提问作者reader
相关产品推荐
相关产品推荐

