You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle存储过程编译报错求助:存在ORA-00907等错误

排查Oracle存储过程编译错误的解决方案

咱们一步步拆解你遇到的两个编译错误,再给出修正后的代码:

1. 解析ORA-00907: missing right paren错误

这个报错的根源是你给表和别名套了多余的括号。Oracle里定义表别名时,不需要用括号包裹表名和别名,比如你写的(SUBASTA AS s)(PUJA AS p)都是错误写法,直接去掉外层括号就能解决这个语法问题。

2. 解析PL/SQL: SQL Statement ignored错误

这个错误是因为你在OPEN outi FOR语句里混用了INTO var1OPEN ... FOR是用来打开游标并返回结果集的,而INTO是用来把单行查询结果赋值给变量的,这俩语法不能同时使用。既然你的输出参数是sys_refcursor,直接让游标返回查询结果就行,完全不需要额外的变量赋值操作。

修正后的存储过程

CREATE OR REPLACE procedure getPrecioMayorActual(
    PAR_ID_SUBASTA DECIMAL, 
    outi out sys_refcursor
) IS
BEGIN
    open outi for 
        SELECT p.MONTO_OFRECIDO
        FROM SUBASTA s
        INNER JOIN PUJA p ON s.ID_PUJA_MAYOR = p.ID_PUJA
        WHERE s.ID_SUBASTA = PAR_ID_SUBASTA;
END getPrecioMayorActual;
/

额外补充

如果你的实际需求是获取单个数值而非游标,那需要把输出参数类型改成DECIMAL,再用SELECT ... INTO语法赋值,但根据当前的参数定义,用游标返回结果是更合理的选择。另外Oracle里表别名的AS关键字是可选的,写SUBASTA sSUBASTA AS s都没问题,核心是别加多余括号。

内容的提问来源于stack exchange,提问作者looker

火山引擎 最新活动