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

Cara menggunakan Tabel Oracle PLSQL (Array asosiatif atau tabel indeks menurut)

Tabel Oracle PLSQL

  • Tabel PLSQL adalah tipe data komposit.
  • Ini berperilaku dengan cara yang sama seperti array kecuali yang tidak memiliki batas atas, memungkinkannya untuk terus diperluas.
  • Mereka juga disebut indeks menurut tabel
  • Tabel PLSQL berisi dua elemen

(1) Kunci utama tipe data BINARY_INTEGER yang mengindeks tabel, yang tidak perlu berurutan. Koleksi diperluas dengan menetapkan nilai ke elemen menggunakan nilai indeks yang saat ini tidak ada.
kami juga dapat mengindeks dengan nilai string

(2) Kolom skalar atau tipe data record yang menyimpan indeks berdasarkan elemen tabel

Cara mendefinisikan dan Mendeklarasikan tipe Tabel

Untuk membuat tabel PL/SQL, Anda melakukan dua langkah. Pertama, Anda mendefinisikan tipe TABLE, kemudian mendeklarasikan tabel PL/SQL dari tipe tersebut. Anda dapat mendefinisikan tipe TABEL di bagian deklaratif dari blok, subprogram, atau paket apa pun menggunakan sintaks

Syntax 
 TYPE table_type_name IS TABLE OF datatype [NOT NULL] INDEX BY BINARY_INTEGER;

Jika tipe elemen adalah tipe record, setiap field dalam record harus memiliki tipe data skalar seperti CHAR, DATE, atau NUMBER.

Untuk menentukan tipe elemen, Anda dapat menggunakan %TYPE untuk menyediakan tipe data dari variabel atau kolom database

DECLARE 
 TYPE DEPTTabTyp IS TABLE OF dept.dept_name%TYPE INDEX BY BINARY_INTEGER;

Anda dapat menambahkan batasan NOT NULL ke definisi tipe TABLE dan dengan demikian mencegah penyimpanan null dalam tabel PL/SQL dari tipe tersebut:

DECLARE 
 TYPE DEPTTabTyp IS TABLE OF dept.location%TYPE NOT NULL INDEX BY BINARY_INTEGER;

Anda juga dapat menggunakan %ROWTYPE untuk menentukan tipe elemen.

DECLARE 
 TYPE deptTabTyp IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;

Anda menggunakan tipe RECORD yang ditentukan Pengguna untuk menentukan tipe elemen:

DECLARE 
 TYPE emp_phonetyp IS RECORD
 (
 Stdcode      PLS_INTEGER,
 phn_number   PLS_INTEGER,
 extension    PLS_INTEGER
 );
 TYPE emp_contact IS TABLE OF emp_phonetyp INDEX BY BINARY_INTEGER;

Setelah Anda menentukan tipe TABLE, Anda dapat mendeklarasikan tabel PL/SQL dari tipe tersebut

DECLARE   
 TYPE SalTabTyp IS TABLE OF emp.sal%TYPE 
 INDEX BY BINARY_INTEGER;
 TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
 INDEX BY BINARY_INTEGER;
 sal_tab SalTabTyp;  -- declare PL/SQL table
 emp_tab EmpTabTyp;  -- declare another PL/SQL table

Atribut atau Metode Tabel PLSQL

Tabel PL/SQL memiliki atribut EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT, dan DELETE.

Mereka membuat tabel PL/SQL lebih mudah digunakan dan aplikasi Anda lebih mudah dirawat.

plsql_table_name.attribute_name

Atribut ada, PRIOR, NEXT, dan DELETE mengambil parameter. Setiap parameter harus berupa ekspresi yang menghasilkan nilai BINARY_INTEGER atau nilai yang secara implisit dapat dikonversi ke tipe data tersebut.

DELETE bertindak seperti prosedur, yang disebut sebagai pernyataan. Namun, atribut tabel PL/SQL lainnya bertindak seperti fungsi, yang disebut sebagai bagian dari ekspresi.

Ada(n) Mengembalikan nilai true jika elemen ke-n dalam tabel ada
hitung Mengembalikan jumlah elemen dalam tabel
Pertama dan terakhir FIRST dan LAST mengembalikan nomor indeks pertama dan terakhir (terkecil dan terbesar) dalam tabel PL/SQL
SEBELUMNYA(n ) mengembalikan nomor indeks yang mendahului indeks n dalam tabel PL/SQL
BERIKUTNYA(n ) mengembalikan nomor indeks yang berhasil mengindeks n
Hapus DELETE menghapus semua elemen dari tabel PL/SQL. HAPUS(n ) menghapus n elemen ke-. Jika n adalah nol, HAPUS(n ) tidak melakukan apa-apa. HAPUS(mn ) menghapus semua elemen dalam rentang m .. n . Jika saya lebih besar dari n atau jika m atau n adalah nol, HAPUS(mn ) tidak melakukan apa-apa

Tabel PL/SQL untuk memindahkan data massal masuk dan keluar dari tabel database atau antara aplikasi sisi klien dan subprogram yang disimpan.

Cara mengisi data di Tabel PLSQL

Tabel dengan tipe data sederhana dapat diisi sebagai:

<variable>(<integer>) := <value>;

Tabel dengan tipe data yang kompleks akan membutuhkan kolom yang diisi satu per satu sebagai:

<variable>(<integer>).<column_name> := <value>;

Atau dari kursor:

fetch <cursor_name> into <variable>(<integer>);
Type emptabletype  is table of varchar2(10)
Index by binary_integer;
emp_table emptabletyp;
emp_table (1) := ‘good’;
emp_table (2) := ‘bad’’;

Anda juga dapat mengambil data Oracle ke dalam tabel PL/SQL dengan tiga cara lain

a) Pernyataan SELECT INTO memungkinkan Anda memilih satu baris data

Menggunakan pernyataan SELECT INTO, Anda dapat memilih entri kolom ke dalam elemen skalar. Atau, Anda dapat memilih seluruh baris menjadi elemen rekaman. Dalam contoh berikut, Anda memilih baris dari dept tabel database ke dalam record yang disimpan oleh elemen pertama dari tabel PL/SQL dept_tab:

DECLARE
TYPE DeptTabTyp IS TABLE OF dept%ROWTYPE
INDEX BY BINARY_INTEGER;
dept_tab DeptTabTyp;
BEGIN
/* Select entire row into record stored by first element. */
SELECT * INTO dept_tab(1) FROM dept WHERE deptno = 10;
IF dept_tab(1).dname = 'ACCOUNTING' THEN ...
...
END;

b)  pernyataan FETCH

Dengan pernyataan FETCH, Anda dapat mengambil seluruh kolom data Oracle ke dalam tabel skalar PL/SQL.

Atau Anda dapat mengambil seluruh tabel data Oracle ke dalam tabel catatan PL/SQL.

DECLARE
TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
i BINARY_INTEGER := 0;
CURSOR c1 IS SELECT * FROM emp;
BEGIN
OPEN c1;
LOOP
i := i + 1;
/* Fetch entire row into record stored by ith element. */
FETCH c1 INTO emp_tab(i);
EXIT WHEN c1%NOTFOUND;
-- process data record
END LOOP;
CLOSE c1;
END;

c) kursor FOR loop memungkinkan Anda mengambil beberapa baris.

DECLARE
TYPE EnameTabTyp IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
TYPE SalTabTyp IS TABLE OF emp.sal%TYPE
INDEX BY BINARY_INTEGER;
ename_tab EnameTabTyp;
sal_tab SalTabTyp;
n BINARY_INTEGER := 0;
BEGIN
/* Fetch entire columns into PL/SQL tables. */
FOR emp_rec IN (SELECT ename, sal FROM emp) LOOP
n := n + 1;
ename_tab(n) := emp_rec.ename;
sal_tab(n) := emp_rec.sal;
END LOOP;
...
END;

Anda harus membaca  postingan PLSQL lainnya ini

Struktur dan Jenis Blok Oracle PLSQL
Catatan Oracle PLSQL
Pertanyaan wawancara Oracle plsql
Tutorial cepat Oracle sql dan plsql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat Kunci Asing dengan ON UPDATE CASCADE di Oracle?

  2. Cara Menambahkan Batas Vertikal ke Kotak Keluaran SQL*Plus / SQLcl Anda

  3. java.security.AccessControlException:akses ditolak (java.security.SecurityPermission authProvider.SunMSCAPI)

  4. SSIS - nilai tidak dapat dikonversi karena potensi kehilangan data

  5. Oracle ODP.Net dan EF CodeFirst - Kesalahan SaveChanges