名前があいまいなプロシージャを削除するにはどうすればよいですか?


12

informixを使用しています...

私はそれをどうやってやったのか分かりませんが、私のデータベースには同じ名前の2つの手順があります。私がそれらを削除しようとすると

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番目のものを削除するには、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;

最初の方法が非常に単純であっても、この同じ問題のために真夜中に最初に呼び出されたときに、2番目の方法を選択しました。私の悪い...


また、sshコンソールで「finderr 9700」を使用して、この種のエラーに関する詳細情報を表示できます。多くの場合、情報は非常に便利です。...この問題は、引数(またはそのソース型または親型)が2つ以上のルーチンのパラメーターに暗黙的にキャストされている場合に発生します。たとえば、routine_name(paramtype1)とroutine_name(paramtype2)という2つのルーチンが存在し、routine_name(argtype)でroutine_nameが呼び出されるとします。また、暗黙的なキャストはargtypeからparamtype1へ、そしてargtypeからparamtype2へ存在します。この場合、このエラーが発生します。
MTIhai

ピーター、@ MTIhaiこれが解決策だったら、答えに移せますか?
jcolebrand

0

これが将来問題になる可能性があることを認識している場合は、データベース内のすべてのプロシージャで一意でなければならないSPECIFIC名でプロシージャを作成できます。

プロシージャの作成時に問題になることに気付いていない場合は、正式に戻って特定の名前を追加することはできず、問題が発生します。

sysprocedures選択した回答のUPDATEは、ユーザーがinformix(またはプライベートサーバーの場合はサーバー所有者として)接続されている場合にのみ機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.