You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle PL/SQL创建存储过程提示名称已被现有对象占用问题

问题修复方案

1. 「Name already used in existing object」报错原因

你将存储过程命名为TRIPS,和你要查询的表TRIPS重名。Oracle同一Schema下,所有对象(表、存储过程、视图、函数等)的名称不允许重复,因此系统判定名称已被占用抛出报错,和游标、字段没有关系。
解决方法就是修改存储过程的名称,比如改为GET_TRIP_DETAIL即可消除该报错。

2. 代码逻辑错误修复

你的代码还存在变量未定义的问题:你声明的入参是Trip_ID,但后续过滤、输出时用的是从未定义过的T_INFO变量,即便解决了名称冲突也无法正常执行。
修正后的完整代码如下:

CREATE OR REPLACE PROCEDURE GET_TRIP_DETAIL(P_TRIP_ID IN NUMBER) IS
    CURSOR Trips_CURSOR IS 
        SELECT * FROM TRIPS WHERE TRIPS_ID = P_TRIP_ID;
BEGIN
    DBMS_OUTPUT.PUT_LINE('The ID of this trip is ' || P_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;
/

主要修改点:

  • 存储过程重命名为GET_TRIP_DETAIL,解决与TRIPS表的名称冲突问题
  • 入参重命名为P_TRIP_ID,前缀P标识为参数,避免和表字段TRIPS_ID产生命名歧义
  • 删除了未定义变量T_INFO的所有引用,统一使用入参P_TRIP_ID做数据过滤和输出
  • 移除了冗余的T_ROW变量声明,Oracle PL/SQL的FOR循环遍历游标时会自动声明该行类型变量,无需额外定义

执行测试方法

执行存储过程前先开启输出开关:

SET SERVEROUTPUT ON;

调用存储过程查询指定ID的行程信息,示例(将123替换为你要查询的实际Trip ID):

EXEC GET_TRIP_DETAIL(123);

内容的提问来源于stack exchange,提问作者SGA-AllStar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:06:03