Những gì bạn đang thử là cú pháp đúng theo như tôi biết, nhưng trong mọi trường hợp, nó sẽ không hoạt động do kiểu trả về do người dùng xác định, như bạn nghi ngờ.
Đây là một ví dụ với một hàm pipelined được tích hợp sẵn. Tất nhiên, gọi nó là hoạt động cục bộ:
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'));
Lợi nhuận:
SQL_ID: a, child number: 1 cannot be found
Gọi nó qua liên kết cơ sở dữ liệu:
SELECT * FROM TABLE([email protected]('a',1,'ALL'));
không thành công với lỗi này:
ORA-30626: function/procedure parameters of remote object types are not supported
Có thể bạn đang nhận được ORA-904 vì liên kết đi đến một lược đồ cụ thể không có quyền truy cập vào gói. Nhưng trong mọi trường hợp, điều này sẽ không hoạt động, ngay cả khi bạn xác định một kiểu giống hệt với cùng tên trong lược đồ cục bộ của mình, vì chúng vẫn không cùng kiểu theo quan điểm của Oracle.
Tất nhiên, bạn có thể truy vấn từ xa một chế độ xem, vì vậy nếu có một tập hợp các tham số khả thi được xác định rõ ràng, bạn có thể tạo một chế độ xem cho mỗi tổ hợp tham số và sau đó truy vấn rằng, ví dụ:
CREATE VIEW display_cursor_a_1_all AS
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'))
;
Nếu phạm vi giá trị tham số có thể có quá lớn, bạn có thể tạo một thủ tục tạo chế độ xem cần thiết được cung cấp động bất kỳ tập hợp tham số nào. Sau đó, bạn có một quy trình hai bước mỗi khi bạn muốn thực hiện truy vấn:
EXECUTE [email protected](parameters)
SELECT * FROM [email protected];
Sau đó, bạn phải nghĩ xem liệu nhiều phiên có thể gọi điều này song song không và nếu có thì làm cách nào để ngăn chúng dẫm đạp lên nhau.