Trong cơ sở dữ liệu Oracle 10g, có thể tạo kiểu mảng liên kết bên ngoài gói hoặc thủ tục không? Tôi muốn để có thể làm điều này để tôi có thể tham khảo loại mảng liên kết này trong một loại khác. Ví dụ:Có thể tạo kiểu mảng kết hợp Oracle bên ngoài gói/thủ tục không?
create type my_type_map is table of varchar2(10) index by varchar2(10);
create type my_other_type as object (
id number(15),
member procedure initialize(p_my_type_map my_type_map)
) not instantiable not final;
Các lỗi tôi nhận được là:
SQL> create type my_type_map is table of varchar2(20) index by varchar2(10);
2/
Warning: Type created with compilation errors.
SQL> show errors;
Errors for TYPE MY_TYPE_MAP:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/21 PLS-00355: use of pl/sql table not allowed in this context
SQL>
Có vẻ rằng Oracle coi:
index by varchar2(10)
là PL/SQL và doens't cho phép nó trong việc tạo ra Các loại SQL. Nếu Oracle thực sự không cho phép các mảng kết hợp được định nghĩa bên ngoài các gói thì có một lựa chọn tốt không? Có thể tạo các loại mở rộng đối tượng của Oracle bên trong một gói để tất cả các loại được định nghĩa trong cùng một gói không?
Cảm ơn, Jeff
Sửa: Sửa mẫu mã, thêm vào nhật ký, bổ sung khả năng thay thế như câu hỏi.
Khi nào bạn gặp lỗi? Tôi vừa tạo cả hai loại trên mà không có khiếu nại từ oracle, 10gR2. Ví dụ của bạn nói INDEX BY VARCHAR2, chứ không phải pls_integer ... – DCookie
Đã thêm chi tiết và chỉnh sửa. Cảm ơn! – jlpp