Làm thế nào để xóa một thủ tục mà tên là mơ hồ?


12

Tôi đang sử dụng thông tin ...

Tôi không biết làm thế nào tôi làm điều đó, nhưng có hai thủ tục có cùng tên trong cơ sở dữ liệu của tôi. Khi tôi cố gắng loại bỏ chúng bằng một

DROP PROCEDURE myProc;

sau đó tôi nhận được một thông báo lỗi

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

Làm thế nào tôi có thể bỏ các thủ tục?

Câu trả lời:


13

Điều này xảy ra khi bạn có 2 thủ tục trở lên, có cùng tên, nhưng với số lượng tham số đầu vào khác nhau.

Ví dụ: bạn đã tạo 2 thủ tục:

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

Để xóa cái thứ hai, bạn có 2 tùy chọn:

Một cách dễ dàng:

DROP PROCEDURE myProc(param1, param2);

Cái khó nhất:

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;

Ngay cả khi phương thức đầu tiên rất đơn giản, lần đầu tiên tôi được gọi vào giữa đêm cho cùng một vấn đề, tôi đã chọn cách thứ hai. Lỗi của tôi ...


Ngoài ra, bạn có thể sử dụng "finderr 9700" trong bảng điều khiển ssh của mình để xem thêm thông tin về loại lỗi này. Thông tin thường rất hữu ích: ... Vấn đề này xảy ra khi một đối số (hoặc loại nguồn hoặc kiểu cha) có ẩn dẫn đến các tham số của hai hoặc nhiều thường trình. Ví dụ: giả sử tồn tại hai thường trình được gọi là Rout_name (paramtype1) và Rout_name (paramtype2) và Rout_name được gọi với Rout_name (argtype). Ngoài ra, các phôi ẩn tồn tại từ argtype đến paramtype1 và argtype đến paramtype2. Trong trường hợp này, lỗi này được nêu ra.
MTIhai

Peter, @MTIhai nếu đây là giải pháp chúng ta có thể chuyển nó sang câu trả lời không?
jcolebrand

0

Nếu bạn biết rằng đây có thể là một vấn đề trong tương lai, bạn có thể tạo quy trình của mình với một tên CỤ THỂ, phải là duy nhất trong tất cả các quy trình trong cơ sở dữ liệu.

Nếu bạn không biết rằng đó sẽ là một vấn đề khi bạn tạo thủ tục, thì bạn không thể chính thức quay lại và thêm một tên cụ thể và bạn có vấn đề.

CẬP NHẬT sysprocedurestrong câu trả lời được chọn chỉ nên hoạt động nếu người dùng được kết nối dưới dạng informix(hoặc, trong trường hợp máy chủ riêng, chủ sở hữu máy chủ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.