Mengisi Tabel PL/SQL dari Blok di Oracle D2k Forms
Sebuah tabel PL/SQL dapat diisi dari sebuah blok menggunakan Forms'implicit mengisi built-in TABLE_FROM_BLOCK. Fitur yang sangat berguna ini menghilangkan keharusan Anda mengulang blok secara eksplisit. Prosedur berikut mengilustrasikan konsep:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Untuk menggunakan teknik ini, ikuti langkah-langkah berikut:
IS
/* Define a PL/SQL record with two fields code and name */
TYPE state_rec IS RECORD (code varhcar2(2), name varhcar2(30));
/* Define a PL/SQL table of the record defined above */
TYPE my_table IS TABLE OF state_rec INDEX BY BINARY_INTEGER;
my_table1 my_table;
/* Define a variable of type ITEMS_IN_BLOCK. ITEMS_IN_BLOCK is a
Forms-defined table */
Item_data ITEMS_IN_BLOCK;
Cnt NUMBER;
BEGIN
Item_data(1) := 'STATE_CODE';
item_data(2) := 'STATE_NAME';
/* The call to the Forms built-in TABLE_FROM_BLOCK retrieves the records
from the block and populates the my_table1 table of records */
TABLE_FROM_BLOCK(my_table1, 'STATE',1, ALL_RECORDS, item_data);
-- The SUCCESS or FAILURE of this built-in can be assessed
-- with FORM_SUCCESS, just like any other built-in
IF NOT FORM_SUCCESS THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;
Cnt := my_table1.COUNT;
END populate_plsql_table;
- Tentukan catatan PL/SQL agar setara dengan struktur catatan yang akan diteruskan sebagai input. Dalam hal ini, ini adalah state_rec dan merupakan dua item KODE dan NAMA sesuai dengan STATE_CODE dan STATE_NAME.
- Tentukan tabel PL/SQL menjadi tabel record dari tipe yang ditentukan pada langkah 1. Dalam hal ini, ini adalah my_table.
CatatanDokumentasi Oracle mendefinisikan tabel PL/SQL menjadi tipe PLITBLM.TABLE_OF_ANY, tetapi mendefinisikan tabel PL/SQL dengan cara yang saya jelaskan berfungsi dengan baik.
- Tentukan variabel bertipe ITEMS_IN_BLOCK (tabel VARCHAR2 ) dan atur elemen individualnya menjadi nama-nama blok nama item yang nilainya digambarkan sebagai elemen dari tipe rekaman yang ditentukan pada langkah 1.
- Panggil TABLE_OF_ANY built bawaan dengan tabel PL/SQL yang ditentukan, nama blok masukan, nomor catatan awal, nomor catatan akhir, dan variabel yang ditentukan pada langkah 3 dilewatkan sebagai parameter.
Keberhasilan atau Kegagalan TABLE_FROM_BLOCK
Keberhasilan atau kegagalan TABLE_FROM_BLOCK dalam banyak kasus dapat terjebak oleh FORM_SUCCESS. Namun, ada pengecualian. Salah satu pengecualian tersebut adalah kesalahan FRM-40733:PL/SQL built-in TABLE_FROM_BLOCK gagal. Dalam hal ini, ini bukan salah satu dari FORM_SUCCESS, FORM_FAILURE, atau FORM_FATAL. ON-ERROR sering kali merupakan alternatif praktis untuk FORM_SUCCESS untuk melacak keberhasilan atau kegagalan TABLE_FROM_BLOCK dan dalam contoh ini juga membantu kita dalam menjebak kesalahan ini. Kesalahan sebelumnya terjadi ketika nama blok yang tidak ada dilewatkan atau nilai negatif dilewatkan untuk posisi rekaman awal atau awal dan akhir. TipHal penting lainnya yang perlu diperhatikan adalah bahwa TABLE_FROM_BLOCK secara implisit mengulang blok, jadi POST-QUERY dijalankan untuk setiap record. Namun, ini lebih cepat daripada pengulangan manual. Untuk kumpulan hasil 3.300 catatan, terlihat 3,5 kali lebih cepat daripada pengulangan manual dengan Oracle 8.0.5 yang berjalan di Windows NT.
-
Mengulang ResultSet menggunakan JDBC untuk Oracle membutuhkan banyak waktu sekitar 16 detik?
-
ORA-38868
-
bagaimana cara mendeklarasikan %ROWTYPE dari variabel yang merupakan SYS_REFCURSOR yang diketik dengan lemah?
-
Tabel Sementara Lokal di Oracle 10 (untuk ruang lingkup Prosedur Tersimpan)
-
Membuktikan kesetaraan kueri SQL