Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Jenis yang ditentukan pengguna Oracle di dalam definisi paket

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01847 hari dalam sebulan harus antara 1 dan hari terakhir dalam sebulan - tetapi datanya OK

  2. Oracle:Hapus dari bawah ke atas

  3. Menggunakan operator 'LIKE' dengan subquery yang mengembalikan banyak hasil

  4. Bagaimana cara merepresentasikan Oracle Interval di Java

  5. Bagaimana mengatasi ORA-29283 :operasi file tidak valid