Rumah >pangkalan data >Oracle >Bagaimanakah saya menggunakan koleksi dalam PL/SQL (array, rekod, jadual)?
PL/SQL menawarkan beberapa jenis pengumpulan untuk menguruskan kumpulan data yang berkaitan, meningkatkan kecekapan kod dan kebolehbacaan. Ini termasuk jadual bersarang, array bersekutu (jadual indeks), dan rekod. Mari kita periksa setiap:
Rekod: Rekod adalah serupa dengan struktur dalam bahasa lain. Mereka mengumpulkan unsur -unsur jenis data yang berbeza di bawah satu nama. Mereka diisytiharkan dengan pernyataan TYPE
dan kemudian digunakan untuk mengisytiharkan pembolehubah.
<code class="sql">DECLARE TYPE employee_record IS RECORD ( employee_id NUMBER, employee_name VARCHAR2(50), salary NUMBER ); emp employee_record; BEGIN emp.employee_id := 123; emp.employee_name := 'John Doe'; emp.salary := 60000; DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp.employee_id); END; /</code>
Jadual bersarang: Jadual bersarang diperintahkan koleksi jenis data homogen. Mereka membenarkan senarai panjang berubah-ubah.
<code class="sql">DECLARE TYPE num_list IS TABLE OF NUMBER; numbers num_list := num_list(1, 2, 3, 4, 5); BEGIN FOR i IN numbers.FIRST .. numbers.LAST LOOP DBMS_OUTPUT.PUT_LINE(numbers(i)); END LOOP; END; /</code>
Arahan bersekutu (jadual indeks): Ini adalah serupa dengan peta hash atau kamus dalam bahasa lain. Mereka menyimpan pasangan nilai kunci, di mana kunci mestilah subtipe PLS_INTEGER
dan nilai boleh menjadi jenis data.
<code class="sql">DECLARE TYPE emp_salary IS TABLE OF NUMBER INDEX BY VARCHAR2(50); salaries emp_salary; BEGIN salaries('John Doe') := 60000; salaries('Jane Smith') := 75000; DBMS_OUTPUT.PUT_LINE('John Doe salary: ' || salaries('John Doe')); END; /</code>
Memilih jenis koleksi yang sesuai bergantung kepada keperluan khusus anda. Rekod adalah sesuai untuk mengumpulkan elemen data yang berkaitan, jadual bersarang untuk senarai yang diperintahkan, dan array bersekutu untuk carian nilai utama.
Implikasi prestasi menggunakan jenis koleksi yang berbeza berbeza bergantung pada bagaimana ia digunakan dan saiz data. Umum:
Saiz koleksi dan kekerapan operasi (sisipan, penghapusan, carian) sangat mempengaruhi prestasi keseluruhan. Untuk dataset yang sangat besar, pertimbangkan untuk mengoptimumkan corak akses dan berpotensi menggunakan pendekatan alternatif seperti pandangan yang terwujud atau fungsi pipelined.
Lulus koleksi sebagai parameter dengan cekap melibatkan pemahaman mod lulus yang berlainan (masuk, keluar) dan memilih kaedah yang sesuai berdasarkan keperluan anda. Menggunakan atribut %ROWTYPE
di mana sesuai juga meningkatkan prestasi.
Dalam parameter: Ini adalah cara yang paling biasa untuk lulus koleksi. Koleksi ini diluluskan sebagai nilai baca sahaja. Prosedur atau fungsi menerima salinan koleksi, yang boleh menjadi cekap untuk koleksi yang lebih kecil tetapi boleh kurang cekap untuk yang sangat besar.
Parameter keluar: Prosedur atau fungsi mengubahsuai pengumpulan dan mengembalikan versi yang diubahsuai.
Dalam Parameter Keluar: Koleksi kedua -duanya diluluskan dan diubahsuai dalam prosedur atau fungsi, dan versi yang diubahsuai dikembalikan.
Contoh Menggunakan dalam parameter:
<code class="sql">CREATE OR REPLACE PROCEDURE process_numbers (numbers IN num_list) IS BEGIN -- Process the numbers collection END; /</code>
Untuk koleksi yang sangat besar, pertimbangkan untuk meluluskannya dengan merujuk menggunakan jenis objek dan bukan secara langsung lulus koleksi. Ini dapat mengurangkan overhead memori menyalin dataset besar.
Ya, koleksi dapat meningkatkan kecekapan kod PL/SQL anda dengan beberapa cara:
Contoh kecekapan yang lebih baik:
Daripada pendekatan yang tidak cekap ini:
<code class="sql">FOR i IN 1..1000 LOOP SELECT column1 INTO variable1 FROM table1 WHERE id = i; -- Process variable1 END LOOP;</code>
Gunakan pendekatan yang lebih cekap ini menggunakan jadual bersarang:
<code class="sql">DECLARE TYPE num_list IS TABLE OF NUMBER; data num_list; BEGIN SELECT id BULK COLLECT INTO data FROM table1 WHERE id BETWEEN 1 AND 1000; FOR i IN data.FIRST .. data.LAST LOOP -- Process data(i) END LOOP; END; /</code>
Dengan menggunakan BULK COLLECT INTO
, anda mengambil semua 1000 ID dalam satu pangkalan data sepanjang perjalanan, meningkatkan prestasi dengan ketara. Prinsip ini juga berlaku untuk operasi pangkalan data lain. Ingatlah untuk memilih jenis pengumpulan yang sesuai untuk prestasi optimum berdasarkan struktur data dan corak akses anda.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan koleksi dalam PL/SQL (array, rekod, jadual)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!