Як видалити процедуру, назва якої є неоднозначною?


12

Я використовую informix ...

Я не знаю, як я це зробив, але в моїй базі даних є дві процедури з тим же ім'ям. Коли я намагаюся видалити їх за допомогою

DROP PROCEDURE myProc;

то я отримую повідомлення про помилку

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

Як я можу відмовитись від процедур?

Відповіді:


13

Це трапляється, коли у вас є 2 або більше процедур, з тим самим іменем, але з різною кількістю вхідних параметрів.

Наприклад, ви створили 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;

Навіть якщо перший метод є мертвим простим, коли я вперше мене подзвонив посеред ночі з цієї ж проблеми, я вибрав другий. Моє ліжко ...


Крім того, ви можете використовувати "finderr 9700" у своїй консолі ssh, щоб дізнатися більше про подібні помилки. Інформація часто дуже корисна: ... Ця проблема трапляється тоді, коли аргумент (або його тип джерела чи тип батьків) неявно вказує на параметри двох або більше підпрограм. Наприклад, припустимо, що існують дві підпрограми під назвою rutut_name (paramtype1) та rutur_name (paramtype2), а rutut_name викликається з іменем rut_name (argtype). Також неявні касти існують від арготипу до парамтипу1 та арґтипу до парамтипу2. У цьому випадку ця помилка підвищується.
MTIhai

Пітер, @MTIhai, якщо це було рішення, чи можемо ми перейти до відповіді?
jcolebrand

0

Якщо ви знаєте, що це може бути проблемою в майбутньому, ви можете створити свою процедуру з іменем SPECIFIC, яке повинно бути унікальним для всіх процедур у базі даних.

Якщо ви не знаєте, що це буде проблема під час створення процедури, ви не можете офіційно повернутися назад і додати конкретне ім’я, і у вас є проблема.

ОНОВЛЕННЯ sysproceduresу вибраній відповіді має працювати лише informixв тому випадку, якщо користувач підключений як (або, у випадку приватного сервера, власника сервера).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.