Come eliminare una procedura il cui nome è ambiguo?


12

Sto usando informix ...

Non so come ho fatto, ma ci sono due procedure con lo stesso nome nel mio database. Quando provo a rimuoverli con a

DROP PROCEDURE myProc;

quindi ricevo un messaggio di errore

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

Come posso eliminare le procedure?

Risposte:


13

Questo succede quando hai 2 o più procedure, con lo stesso nome, ma con un numero diverso di parametri di input.

Ad esempio, sono state create 2 procedure:

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

Per eliminare il secondo, hai 2 opzioni:

Quello facile:

DROP PROCEDURE myProc(param1, param2);

Quello difficile:

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;

Anche se il primo metodo è semplicissimo, la prima volta che sono stato chiamato nel cuore della notte per questo stesso problema, ho scelto il secondo. Colpa mia ...


Inoltre, puoi usare "finderr 9700" nella tua console ssh per vedere maggiori informazioni su questo tipo di errore. Le informazioni sono spesso molto utili: ... Questo problema si verifica quando un argomento (o il suo tipo di origine o tipo di genitore) ha cast impliciti sui parametri di due o più routine. Ad esempio, supponiamo che esistano due routine chiamate routine_name (paramtype1) e routine_name (paramtype2) e routine_name viene richiamato con routine_name (argtype). Inoltre, esistono cast impliciti da argtype a paramtype1 e argtype a paramtype2. In questo caso, questo errore viene generato.
MTIhai,

Peter, @MTIhai se questa fosse la soluzione possiamo spostarla in una risposta?
jcolebrand

0

Se si è consapevoli che questo potrebbe essere un problema in futuro, è possibile creare la procedura con un nome SPECIFICO, che deve essere univoco in tutte le procedure nel database.

Se non si è consapevoli del fatto che sarà un problema quando si crea la procedura, non è possibile tornare ufficialmente indietro e aggiungere un nome specifico e si verifica un problema.

L'aggiornamento di sysproceduresnella risposta selezionata dovrebbe funzionare solo se l'utente è connesso come informix(o, nel caso di un server privato, il proprietario del server).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.