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

TYPE Definisi Perubahan di Oracle 21c

SQL*Plus dan PL/SQL telah berselisih selama bertahun-tahun — banyak kasus di mana cara tugas dilakukan menggunakan SQL*Plus berbeda dari cara menyelesaikan tugas yang sama atau serupa di PL/SQL. Selain itu ada tipe data yang tersedia di PL/SQL yang tidak tersedia di SQL*Plus. Oracle versi 21c menyediakan cara untuk menggunakan beberapa tipe data PL/SQL dalam definisi tipe SQL*Plus, dengan peringatan bahwa tipe PL/SQL tidak akan bertahan. Apa artinya ini dan bagaimana seseorang menggunakan jenis harta karun yang baru ditemukan ini? Mari selidiki lebih lanjut dan lihat apa yang kami temukan.

Untuk sementara sekarang membuat tipe tertentu di PL/SQL dan SQL*Plus melibatkan perubahan sintaks — tipe dengan dua elemen di PL?SQL adalah record, dan konstruksi tipe yang sama di SQL*Plus menjadi tipe objek. Ini adalah sesuatu yang sudah biasa dilakukan oleh pengembang. Namun jika tipe tersebut perlu berisi tipe PL/SQL (boolean, pls_integer, binary_integer, dll.) sayangnya tidak ada cara mudah di SQL*Plus untuk memenuhi persyaratan itu. Sampai 21c. Mari kita lihat contoh bagaimana tipe tersebut dapat digunakan dalam definisi tipe SQL*Plus. Katakanlah, untuk argumen, sebuah tipe dibutuhkan dengan tipe data BOOLEAN di SQL*Plus. Sebelum 21c perlu melakukan BANYAK pengkodean untuk meniru tipe data BOOLEAN — dengan 21c kita dapat menggunakan BOOLEAN sebagai tipe, selama database tidak mencoba menyimpan data ke disk:

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num    number,
  4     e_nme    varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean
  7  ) not persistable ;
  8  /

Type created.

Objek seperti itu dapat diteruskan ke unit program PL/SQL dengan nilai BOOLEAN pada saat dijalankan dan Oracle mengetahui bahwa nilai BOOLEAN tidak akan bertahan di luar konteks saat ini. Seperti yang dinyatakan sebelumnya, ini tidak terbatas pada nilai BOOLEAN; mari kita coba PLS_INTEGER dan BINARY_INTEGER:

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num     number,
  4     e_nme     varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean,
  6     old_sal   pls_integer,
  7     yrly_sal   binary_integer
  8  ) not persistable ;
  9  /

Type created.

Tipe data apa pun yang tidak dapat dipertahankan di SQL*Plus tidak akan terjadi karena instruksi "tidak dapat dipertahankan", meskipun mereka dapat diteruskan ke unit PL/SQL pada saat dijalankan.

Jika Anda bertanya-tanya apakah ini juga tersedia untuk digunakan dalam tabel dan varray bersarang, jawabannya adalah ya:

SQL> create or replace
  2  type i_array as
  3  varray(40) of (binary_integer)
  4  not persistable;
  5  /

Type created.

Sayangnya ini tidak memungkinkan menggunakan referensi %TYPE (pintasan yang terkenal dan sering digunakan dengan pengkodean PL/SQL untuk memastikan jenis yang cocok antara kode PL/SQL dan tabel yang digunakan) dalam jenis apa pun menggunakan direktif "tidak dapat dipertahankan":

SQL> create or replace
  2  type  EMP_SAL_APPROVAL_FOR_PL as object
  3  (  e_num     emp.empno%type,
  4     e_nme     varchar2(35),
  5     new_sal      number,
  6     mgr_approve boolean,
  6     old_sal   pls_integer,
  7     yrly_sal   binary_integer
  8  ) not persistable ;
  9  /

Warning: Type created with compilation errors.

SQL>
SQL> show errors
Errors for TYPE EMP_SAL_APPROVAL_FOR_PL

LINE/COL ERROR
-------- -----------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
3/12     PLS-00201: identifier 'EMP.EMPNO' must be declared

Oracle telah membuat langkah signifikan dengan arahan "tidak dapat dipertahankan", yang memungkinkan pemrogram untuk menggunakan tipe data PL/SQL dalam definisi tipe SQL*Plus; ini akan, kemungkinan besar, memiliki penggunaan atau daya tarik yang terbatas mengetahui data yang diwakili oleh konstruksi semacam itu tidak akan disimpan dalam database, tetapi ketika meneruskan nilai BOOLEAN, PL:S_INTEGER atau BINARY_INTEGER dari SQL*Plus ke unit program PL/SQL itu bisa hilangkan masalah ketidakcocokan tipe apa pun yang disebabkan oleh tidak adanya tipe seperti itu di SQL*Plus. Dan ini mungkin langkah pertama dalam memperluas kompatibilitas fungsional SQL*Plus dengan PL/SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ganti nama Tabel atau Tampilan Oracle

  2. Mengonversi Panjang ke Varchar2

  3. Menjaga agnostik database aplikasi (ADO.NET vs enkapsulasi logika DB)

  4. 2 Cara Mengonversi ke Huruf Besar di Oracle

  5. Cara mengembalikan parameter keluaran Oracle dari prosedur tersimpan di .NET