【问题标题】:PL/SQL Function exists?PL/SQL 函数是否存在?
【发布时间】:2011-07-20 08:55:28
【问题描述】:

我正在尝试创建一个名为 add_extra 的函数。

CREATE OR REPLACE FUNCTION add_extra(p_price NUMBER)
RETURN NUMBER
IS
BEGIN
  RETURN(9000);
END add_extra;

但是,当我运行脚本时,它会说:

Error starting at line 1 in command:
CREATE OR REPLACE FUNCTION add_extra(p_price NUMBER)
RETURN NUMBER
IS
BEGIN
  RETURN(9000);
END add_extra;
Error report:
ORA-00955: name is already used by an existing object
00955. 00000 -  "name is already used by an existing object"
*Cause:    
*Action:

当我尝试时:DROP FUNCTION add_extra; 它告诉我:

Error starting at line 1 in command:
DROP FUNCTION add_extra
Error report:
SQL Error: ORA-04043: object ADD_EXTRA does not exist
04043. 00000 -  "object %s does not exist"
*Cause:    An object name was specified that was not recognized by the system.
               There are several possible causes:
           - An invalid name for a table, view, sequence, procedure, function,
           package, or package body was entered. Since the system could not
           recognize the invalid name, it responded with the message that the
           named object does not exist.
           - An attempt was made to rename an index or a cluster, or some
           other object that cannot be renamed.
*Action:   Check the spelling of the named object and rerun the code. (Valid
           names of tables, views, functions, etc. can be listed by querying
           the data dictionary.)

它存在还是不存在?我做错了什么?

【问题讨论】:

  • 会不会是该功能存在但您无权查看?您是否尝试在您登录的架构中创建函数,或者您是否使用“alter session set current_schema ...”来处理不同的架构?您是否尝试过明确指定架构(CREATE OR REPLACE FUNCTION MYUSER.ADD_EXTRA...)?
  • 我不确定,但我猜它在我登录的架构中,因为所有其他函数、过程等都出现在对象列表中。另外,当我使用 username.add_extra 时,我得到了同样的错误。
  • 此查询可能有助于确定您的对象所在的架构 (OWNER):SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = 'ADD_EXTRA'
  • 感谢您的提示!它显示DEGYVI09 为所有者,但是当我尝试运行:DROP FUNCTION DEGYVI09.ADD_EXTRA 时,它告诉我它不存在。

标签: function plsql ora-00955


【解决方案1】:
CREATE OR REPLACE FUNCTION add_extra(p_price IN NUMBER)

您的查询中缺少__IN__ 关键字。

【讨论】:

    【解决方案2】:

    我几乎可以肯定它是FUNCTION,但它是PROCEDURE! 所以,DROP PROCEDURE ADD_EXTRA; 工作了。

    【讨论】:

    • 描述 add_extra;会告诉你你正在处理给定对象的内容。
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多