【问题标题】:ORA-00955: name is already used by an existing object with functionORA-00955: 名称已被具有函数的现有对象使用
【发布时间】:2020-05-03 09:26:12
【问题描述】:

我正在尝试编写一个函数,该函数可以按 Oracle 'SQL' 中的飞行次数返回 traverlers 的 conut 我的代码是

Create or replace function TravelersCount(flightNumber in number)
Return number
Is
Travelers_Count number(20); 
BEGIN

Select count(traveler_number) into Travelers_Count from Travel_details where flight_number = flightNumber;
return Travelers_Count;
END;

但我收到了一条错误消息

ORA-00955: name is already used by an existing object

请帮我解决这个问题

【问题讨论】:

    标签: sql oracle function


    【解决方案1】:

    将函数名称TravelersCount 更改为不同的值。看起来还有其他同名的对象

    Create or replace function TravelersCount (flightNumber in number) ...

    【讨论】:

    • 非常感谢.. 我没注意到
    【解决方案2】:

    检查一下

    select * from user_objects where object_name = 'TRAVELERSCOUNT';
    

    查看对象的类型并决定做什么(是否删除它并重用该对象名称,或者将函数的名称更改为其他名称)。


    建议,如果可以的话:您将参数命名为与列名几乎相同:

    where flight_number = flightNumber
    

    很难区分哪个是哪个。通常,我们在参数前面加上一些前缀,例如p_par_。此外,始终使用表别名是一个好习惯,以避免混淆。最后,在 Oracle 中,所有对象名称默认为大写(我们不使用MixedCase,而是像mixed_case 一样使用下划线),但您可以使用任何您想要的大小写来引用它们。

    所以:

    create or replace function f_travelers_count (p_flight_number in number)
      return number
    is
      travelers_count number(20); 
    begin
      select count(t.traveler_number) 
        into travelers_count 
        from travel_details t
        where t.flight_number = p_flight_number;
    
      return travelers_count;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多