모호한 이름의 프로 시저를 삭제하는 방법은 무엇입니까?


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 개의 프로 시저를 작성했습니다.

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

두 번째 옵션을 삭제하려면 두 가지 옵션이 있습니다.

쉬운 것 :

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;

첫 번째 방법이 간단하지 않더라도 한밤중에 같은 문제로 처음 전화를 걸 때 두 번째 방법을 선택했습니다. 내 잘못이야 ...


또한 ssh 콘솔에서 "finderr 9700"을 사용하여 이러한 종류의 오류에 대한 자세한 정보를 볼 수 있습니다. 정보는 종종 매우 유용합니다. ...이 문제는 인수 (또는 소스 유형 또는 상위 유형)에 둘 이상의 루틴 매개 변수에 대한 내재 된 캐스트가있을 때 발생합니다. 예를 들어, routine_name (paramtype1) 및 routine_name (paramtype2)이라는 두 개의 루틴이 존재하고 routine_name은 routine_name (argtype)으로 호출된다고 가정하십시오. 또한 내재 된 캐스트는 argtype에서 paramtype1로, argtype에서 paramtype2로 존재합니다. 이 경우이 오류가 발생합니다.
MTIhai

Peter, @MTIhai 이것이 해결책이라면 대답으로 옮길 수 있습니까?
jcolebrand

0

앞으로 이것이 문제가 될 수 있음을 알고있는 경우 데이터베이스의 모든 프로 시저에서 고유해야하는 SPECIFIC 이름으로 프로 시저를 작성할 수 있습니다.

프로 시저를 작성할 때 문제가된다는 것을 모르는 경우 공식적으로 돌아가서 특정 이름을 추가 할 수 없으며 문제가 있습니다.

sysprocedures선택한 답변 의 UPDATE는 사용자가 informix(또는 개인 서버의 경우 서버 소유자) 로 연결된 경우에만 작동합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.