Hangi adın belirsiz olduğu bir prosedür nasıl silinir?


12

Ben informix kullanıyorum ...

Bunu nasıl yaptığımı bilmiyorum, ama veritabanımda aynı ada sahip iki prosedür var. Onları bir ile kaldırmaya çalıştığımda

DROP PROCEDURE myProc;

sonra bir hata mesajı alıyorum

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

Prosedürleri nasıl bırakabilirim?

Yanıtlar:


13

Bu, aynı ada sahip ancak farklı sayıda giriş parametresine sahip 2 veya daha fazla yordamınız olduğunda olur.

Örneğin, 2 prosedür oluşturdunuz:

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

İkincisini silmek için 2 seçeneğiniz vardır:

Kolay olan:

DROP PROCEDURE myProc(param1, param2);

Zor olan:

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;

İlk yöntem basit olsa bile, ilk kez aynı sorun için gecenin ortasında çağrıldığımda, ikincisini seçtim. Benim hatam ...


Ayrıca, bu tür bir hata hakkında daha fazla bilgi görmek için ssh konsolunuzda "finderr 9700" kullanabilirsiniz. Bilgi genellikle çok yararlıdır: ... Bu sorun, bir bağımsız değişkenin (veya kaynak türünün veya üst türünün) iki veya daha fazla rutinin parametrelerine örtülü dökümler olması durumunda oluşur. Örneğin, rutin_adı (paramtype1) ve rutin_adı (paramtype2) adında iki rutin bulunduğunu ve rutin_adı rutin_adı (argtype) ile çağrıldığını varsayın. Ayrıca, argtype'den paramty1'e ve argtype'den paramtype2'ye kadar örtük dökümler vardır. Bu durumda, bu hata ortaya çıkar.
MTIhai

Peter, @MTIhai eğer çözüm buysa cevabı alabilir miyiz?
jcolebrand

0

Bunun gelecekte bir sorun olabileceğini biliyorsanız, yordamınızı veritabanındaki tüm yordamlarda benzersiz olması gereken SPECIFIC adıyla oluşturabilirsiniz.

Yordamı oluştururken bunun bir sorun olacağını bilmiyorsanız, resmi olarak geri dönüp belirli bir ad ekleyemezsiniz ve bir sorununuz vardır.

Seçilen yanıttaki UPDATE sysproceduresöğesi yalnızca kullanıcı olarak informix(veya özel bir sunucu olması durumunda sunucu sahibi) bağlıysa çalışır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.