Tidak, itu tidak diizinkan:
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>
Jika Anda ingin membuat tipe yang hanya melewatkan data di antara prosedur PL/SQL, gunakan sintaks 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>
Namun, jika Anda menginginkan tipe yang dapat Anda gunakan dalam pernyataan SQL - yaitu, sebagai input ke TABLE()
function - Anda harus membuatnya sebagai tipe SQL. SQL dan PL/SQL menggunakan dua mesin yang berbeda, dan hanya tipe SQL yang terlihat oleh mesin SQL.
Saran saya tentang perlunya Jenis SQL tidak lagi berlaku untuk versi Oracle yang lebih baru. Tentu saja di 11gR2 dan 12c mesin SQL akan mendukung SQL dalam paket PL/SQL yang menggunakan tabel PL/SQL dalam TABLE()
ayat. Jenis harus dideklarasikan dalam spesifikasi paket, sehingga publik dan dapat dilihat oleh mesin SQL. Di bawah penutup Oracle menghasilkan tipe SQL untuk setiap deklarasi. Anda dapat melihat Jenis ini karena namanya dimulai dengan SYS_PLSQL_
diikuti oleh pengenal numerik.