Không, nó không được phép:
SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS -- spec
-- PROCEDURE my_rpcedure (emp_id NUMBER);
TYPE DTO_GRID AS OBJECT
(
ROWKEY NVARCHAR2(200),
COLUMNKEY NVARCHAR2(200),
CELLVALUE NVARCHAR2(200),
OLDVALUE NVARCHAR2(200),
TAG NVARCHAR2(200)
);
END AF_CONTRACT;
/
2 3 4 5 6 7 8 9 10 11 12
Warning: Package created with compilation errors.
SQL> SQL> sho err
Errors for PACKAGE AF_CONTRACT:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/4 PLS-00540: object not supported in this context.
SQL>
Nếu bạn muốn tạo một kiểu chỉ truyền dữ liệu giữa các thủ tục PL / SQL thì hãy sử dụng cú pháp PL / SQL RECORD:
SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS -- spec
-- PROCEDURE my_rpcedure (emp_id NUMBER);
TYPE DTO_GRID IS RECORD
(
ROWKEY NVARCHAR2(200),
COLUMNKEY NVARCHAR2(200),
CELLVALUE NVARCHAR2(200),
OLDVALUE NVARCHAR2(200),
TAG NVARCHAR2(200)
);
END AF_CONTRACT;
/
2 3 4 5 6 7 8 9 10 11 12
Package created.
SQL>
Tuy nhiên, nếu bạn muốn một kiểu mà bạn có thể sử dụng trong câu lệnh SQL - nghĩa là, làm đầu vào cho TABLE()
- bạn sẽ cần tạo nó dưới dạng một kiểu SQL. SQL và PL / SQL sử dụng hai công cụ khác nhau và chỉ các loại SQL được hiển thị cho công cụ SQL.
Lời khuyên của tôi về sự cần thiết của Các kiểu SQL không còn đúng với các phiên bản Oracle sau này. Chắc chắn trong 11gR2 và 12c, công cụ SQL sẽ hỗ trợ SQL trong các gói PL / SQL sử dụng bảng PL / SQL trong một TABLE()
mệnh đề. Các loại phải được khai báo trong thông số kỹ thuật gói, do đó công khai và hiển thị đối với công cụ SQL. Dưới vỏ bọc Oracle tạo ra các kiểu SQL cho mỗi khai báo. Bạn có thể phát hiện ra các Loại này vì tên của chúng bắt đầu từ SYS_PLSQL_
theo sau là số nhận dạng.