Jak usunąć procedurę, której nazwa jest niejednoznaczna?

12

Używam informix ...

Nie wiem, jak to zrobiłem, ale w mojej bazie danych są dwie procedury o tej samej nazwie. Kiedy próbuję je usunąć za pomocą

DROP PROCEDURE myProc;

wtedy pojawia się komunikat o błędzie

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

Jak mogę zrezygnować z procedur?

PeterP
źródło

Odpowiedzi:

13

Dzieje się tak, gdy masz 2 lub więcej procedur o tej samej nazwie, ale z różną liczbą parametrów wejściowych.

Na przykład utworzono 2 procedury:

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

Aby usunąć drugi, masz 2 opcje:

Łatwy:

DROP PROCEDURE myProc(param1, param2);

Trudny:

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;

Nawet jeśli pierwsza metoda jest bardzo prosta, po raz pierwszy wezwano mnie w środku nocy z powodu tego samego problemu, wybrałem drugą. Mój błąd ...

MTIhai
źródło
Możesz także użyć „finderr 9700” w konsoli ssh, aby zobaczyć więcej informacji na temat tego rodzaju błędu. Informacje są często bardzo przydatne: ... Ten problem występuje, gdy argument (lub jego typ źródłowy lub typ nadrzędny) niejawnie rzutuje na parametry dwóch lub więcej procedur. Załóżmy na przykład, że istnieją dwie procedury o nazwie nazwa_rutyny (paramtype1) i nazwa_rutyny (paramtype2), a nazwa_rutyny jest wywoływana z nazwą_rutyny (argtype). Istnieją także niejawne rzutowania z argtype na paramtype1 i argtype na paramtype2. W takim przypadku ten błąd jest zgłaszany.
MTIhai,
Peter, @MTIhai, jeśli to było rozwiązanie, czy możemy przejść do odpowiedzi?
jcolebrand
0

Jeśli masz świadomość, że może to stanowić problem w przyszłości, możesz utworzyć procedurę o SZCZEGÓLNEJ nazwie, która musi być unikalna dla wszystkich procedur w bazie danych.

Jeśli nie wiesz, że będzie to stanowić problem podczas tworzenia procedury, nie możesz oficjalnie wrócić i dodać konkretnej nazwy, a masz problem.

AKTUALIZACJA sysproceduresw wybranej odpowiedzi powinna działać tylko wtedy, gdy użytkownik jest podłączony jako informix(lub, w przypadku prywatnego serwera, właściciel serwera).

Jonathan Leffler
źródło