Oracle存储过程编译报错:游标声明不完整、T_ROW无效如何解决?
Oracle存储过程游标编译报错修复方案
错误原因
- 入参引用错误:存储过程声明的入参名为
Trip_ID,但游标过滤条件、输出语句中均使用了未定义的变量T_INFO,Oracle无法识别该变量,导致游标声明校验失败,后续关联的T_ROW变量也被判定为无效对象。 - 冗余的行类型声明:使用
FOR循环遍历游标时,Oracle会自动隐式生成对应行类型的循环变量,无需提前手动声明T_ROW Trips_CURSOR%ROWTYPE。
修正后可正常编译的代码
CREATE OR REPLACE PROCEDURE T(Trip_ID in NUMBER) IS CURSOR Trips_CURSOR IS SELECT * FROM TRIPS where TRIPS_ID = Trip_ID; BEGIN DBMS_OUTPUT.PUT_LINE('The ID of this trip is ' || Trip_ID); FOR T_ROW IN Trips_CURSOR LOOP DBMS_OUTPUT.PUT_LINE('The Date of the trip is ' || T_ROW.DATE_OF_TRIP); DBMS_OUTPUT.PUT_LINE('The Destination town of the Trip ' || T_ROW.Destination_Town); DBMS_OUTPUT.PUT_LINE('The Source town is ' || T_ROW.Source_Town); END LOOP; END; /
内容的提问来源于stack exchange,提问作者Saitou9
相关产品推荐
相关产品推荐

