¿Cómo eliminar un procedimiento cuyo nombre es ambiguo?


12

Estoy usando informix ...

No sé cómo lo hice, pero hay dos procedimientos con el mismo nombre en mi base de datos. Cuando trato de eliminarlos con un

DROP PROCEDURE myProc;

entonces recibo un mensaje de error

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

¿Cómo puedo abandonar los procedimientos?

Respuestas:


13

Esto sucede cuando tiene 2 o más procedimientos, con el mismo nombre, pero con diferentes números de parámetros de entrada.

Por ejemplo, ha creado 2 procedimientos:

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

Para eliminar el segundo, tiene 2 opciones:

El fácil:

DROP PROCEDURE myProc(param1, param2);

El dificil:

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;

Incluso si el primer método es muy simple, la primera vez que me llamaron en medio de la noche por este mismo problema, elegí el segundo. Culpa mía ...


Además, puede usar "finderr 9700" en su consola ssh para ver más información sobre este tipo de error. La información a menudo es muy útil: ... Este problema ocurre cuando un argumento (o su tipo de origen o tipo principal) tiene conversiones implícitas a los parámetros de dos o más rutinas. Por ejemplo, suponga que existen dos rutinas llamadas rutina_nombre (paramtype1) y rutina_nombre (paramtype2), y rutina_nombre se invoca con rutina_nombre (argtype). Además, existen conversiones implícitas de argtype a paramtype1 y argtype a paramtype2. En este caso, se genera este error.
MTIhai

Peter, @MTIhai, si esta fuera la solución, ¿podemos pasar a una respuesta?
jcolebrand

0

Si sabe que esto podría ser un problema en el futuro, puede crear su procedimiento con un nombre ESPECÍFICO, que debe ser único en todos los procedimientos de la base de datos.

Si no sabe que será un problema cuando cree el procedimiento, entonces no puede volver oficialmente y agregar un nombre específico, y sí tiene un problema.

La ACTUALIZACIÓN de sysproceduresen la respuesta seleccionada solo debería funcionar si el usuario está conectado como informix(o, en el caso de un servidor privado, el propietario del servidor).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.