Bagaimana cara menghapus prosedur yang namanya ambigous?

12

Saya menggunakan informix ...

Saya tidak tahu bagaimana saya melakukannya, tetapi ada dua prosedur dengan nama yang sama di database saya. Ketika saya mencoba menghapusnya dengan a

DROP PROCEDURE myProc;

maka saya mendapatkan pesan kesalahan

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

Bagaimana saya bisa membatalkan prosedur?

PeterP
sumber

Jawaban:

13

Ini terjadi ketika Anda memiliki 2 prosedur atau lebih, dengan nama yang sama, tetapi dengan jumlah parameter input yang berbeda.

Misalnya, Anda telah membuat 2 prosedur:

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

Untuk menghapus yang kedua, Anda memiliki 2 opsi:

Yang mudah:

DROP PROCEDURE myProc(param1, param2);

Yang sulit:

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;

Bahkan jika metode pertama mati sederhana, pertama kali saya dipanggil di tengah malam karena masalah yang sama, saya sudah memilih yang kedua. Salahku ...

MTIhai
sumber
Anda juga dapat menggunakan "finderr 9700" di konsol ssh Anda untuk melihat info lebih lanjut tentang kesalahan semacam ini. Info ini seringkali sangat berguna: ... Masalah ini terjadi ketika argumen (atau jenis sumbernya atau tipe induknya) secara implisit dilemparkan ke parameter dua atau lebih rutinitas. Sebagai contoh, asumsikan ada dua rutin yang disebut routine_name (paramtype1) dan routine_name (paramtype2), dan routine_name dipanggil dengan routine_name (argtype). Juga, gips implisit ada dari argtype ke paramtype1 dan argtype ke paramtype2. Dalam hal ini, kesalahan ini dinaikkan.
MTIhai
Peter, @MTIhai jika ini solusinya, bisakah kita memindahkannya ke jawaban?
jcolebrand
0

Jika Anda menyadari bahwa ini mungkin masalah di masa mendatang, Anda dapat membuat prosedur dengan nama SPESIFIK, yang harus unik di semua prosedur dalam database.

Jika Anda tidak menyadari bahwa itu akan menjadi masalah ketika Anda membuat prosedur, maka Anda tidak dapat secara resmi kembali dan menambahkan nama tertentu, dan Anda memang memiliki masalah.

UPDATE sysproceduresdalam jawaban yang dipilih hanya akan berfungsi jika pengguna terhubung sebagai informix(atau, dalam kasus server pribadi, pemilik server).

Jonathan Leffler
sumber