如何删除名称不明确的程序?


12

我正在使用信息提示...

我不知道我是怎么做的,但是数据库中有两个同名的过程。当我尝试用

DROP PROCEDURE myProc;

然后我收到一条错误消息

ERROR: Routine (add_adr_trigger_row) ambiguous - more than one
routine resolves to given signature.
Error Code: -9700

我如何取消该程序?

Answers:


13

当您有两个或多个具有相同名称,但输入参数数量不同的过程时,会发生这种情况。

例如,您创建了2个过程:

CREATE PROCEDURE myProc(param1)
...
CREATE PROCEDURE myProc(param1, param2)
...

要删除第二个选项,您有2个选项:

简单的一个:

DROP PROCEDURE myProc(param1, param2);

困难的是:

dbaccess DB -
select procname, procid, numargs from sysprocedures where procname like 'myProc';
procname  myProc
procid    1
numargs   1

procname  myProc
procid    2
**numargs   2**

UPDATE sysprocedures SET procname='myProcOLD' WHERE procid=2;
DROP PROCEDURE myProcOLD;

即使第一种方法非常简单,但我第一次在半夜因同样的问题而被调用时,我还是选择了第二种。我的错 ...


另外,您可以在ssh控制台中使用“ finderr 9700”来查看有关此类错误的更多信息。该信息通常非常有用:...当参数(或其源类型或父类型)对两个或多个例程的参数隐式转换时,会发生此问题。例如,假定存在两个例程,分别称为“例程名称(paramtype1)”和“例程名称(paramtype2)”,并且使用“例程名称(argtype)”调用例程名称。此外,还存在从argtype到paramtype1以及从argtype到paramtype2的隐式强制转换。在这种情况下,将引发此错误。
MTIhai 2011年

彼得,@ MTIhai如果这是解决方案,我们可以将其解决吗?
jcolebrand

0

如果您知道将来可能会出现问题,则可以使用SPECIFIC名称创建过程,该名称在数据库中的所有过程中都必须是唯一的。

如果您在创建过程时不知道会出现问题,则无法正式返回并添加特定名称,那么您确实有问题。

sysprocedures所选答案中的UPDATE 仅在用户以以下身份连接时才起作用(如果是informix私有服务器,则为服务器所有者)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.