Mewujudkan dan menggunakan prosedur dan fungsi tersimpan dalam PL/SQL melibatkan beberapa langkah utama. Pertama, anda perlu memahami sintaks asas. Prosedur yang disimpan adalah blok kod PL/SQL yang melakukan tugas tertentu, sering melibatkan beberapa penyataan SQL. Mereka tidak mengembalikan nilai secara langsung. Fungsi, sebaliknya, adalah sama tetapi sentiasa mengembalikan satu nilai.
Membuat prosedur yang disimpan:
<code class="sql">CREATE OR REPLACE PROCEDURE my_procedure (param1 IN NUMBER, param2 OUT VARCHAR2) AS variable1 NUMBER := 0; BEGIN -- Your PL/SQL code here SELECT COUNT(*) INTO variable1 FROM my_table WHERE column1 = param1; param2 := 'Record count: ' || variable1; EXCEPTION WHEN OTHERS THEN param2 := 'Error occurred'; END; /</code>
Contoh ini menunjukkan prosedur my_procedure
yang mengambil nombor sebagai input ( param1
) dan mengembalikan mesej rentetan melalui parameter output ( param2
). /
Pada akhirnya adalah bahagian penting sintaks dalam pemaju SQL*Plus atau SQL untuk melaksanakan arahan.
Membuat fungsi:
<code class="sql">CREATE OR REPLACE FUNCTION my_function (param1 IN NUMBER) RETURN NUMBER AS variable1 NUMBER := 0; BEGIN SELECT SUM(column2) INTO variable1 FROM my_table WHERE column1 = param1; RETURN variable1; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 0; END; /</code>
Fungsi ini my_function
mengambil nombor sebagai input dan mengembalikan jumlah lajur dari jadual. Perhatikan pernyataan RETURN
, penting untuk fungsi. Blok EXCEPTION
mengendalikan kes di mana tiada data dijumpai.
Menggunakan prosedur dan fungsi yang disimpan:
Prosedur yang disimpan dipanggil menggunakan pernyataan EXECUTE
atau dalam blok PL/SQL yang lain:
<code class="sql">EXECUTE my_procedure(10, :output_variable); DBMS_OUTPUT.PUT_LINE(:output_variable);</code>
Fungsi boleh dipanggil secara langsung dalam penyata SQL atau blok PL/SQL:
<code class="sql">SELECT my_function(20) FROM dual; SELECT column1, my_function(column1) FROM my_table;</code>
Mengoptimumkan PL/SQL untuk prestasi melibatkan beberapa strategi yang memberi tumpuan kepada amalan pengekodan SQL dan PL/SQL yang cekap.
FORALL
dan bukannya INSERT
atau UPDATE
pernyataan dalam gelung.FORALL
untuk operasi DML pukal. Ini dengan ketara mengurangkan overhead suis konteks berulang.WHERE
klausa untuk menapis data dengan cekap. Elakkan menggunakan SELECT *
dan sebaliknya tentukan hanya lajur yang diperlukan.SELECT INTO
) dan bukannya kursor yang jelas. Jika anda mesti menggunakan kursor, pertimbangkan untuk menggunakan kursor tersirat di mana sesuai atau mengoptimumkan pengambilan kursor. Pengendalian ralat adalah penting untuk kod PL/SQL yang mantap. Blok EXCEPTION
membolehkan anda mengendalikan ralat dengan anggun tanpa merosakkan keseluruhan permohonan.
<code class="sql">BEGIN -- Your PL/SQL code here EXCEPTION WHEN NO_DATA_FOUND THEN -- Handle NO_DATA_FOUND exception DBMS_OUTPUT.PUT_LINE('No data found.'); WHEN OTHERS THEN -- Handle other exceptions DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM); -- Log the error for later analysis END;</code>
Contoh ini menunjukkan blok EXCEPTION
asas. WHEN OTHERS
menangkap apa -apa pengecualian yang tidak diawasi. SQLERRM
menyediakan mesej ralat. Ia penting untuk log kesilapan untuk tujuan debug dan pemantauan. Pengendalian pengecualian yang lebih spesifik adalah lebih baik daripada umum WHEN OTHERS
menyekat untuk memberikan mesej ralat yang lebih bermaklumat dan memudahkan debugging yang lebih baik. Pertimbangkan menggunakan pengecualian tersuai untuk kesilapan aplikasi tertentu.
Perbezaan utama terletak pada nilai pulangan mereka:
Bilakah menggunakan prosedur yang disimpan:
Bila Menggunakan Fungsi:
Pada dasarnya, gunakan prosedur untuk tindakan dan fungsi untuk pengiraan dan pengambilan data. Pilihan bergantung pada tugas khusus yang perlu anda capai. Jika anda perlu mengembalikan satu nilai, fungsi adalah pilihan yang lebih baik. Jika anda melakukan siri tindakan tanpa nilai pulangan tunggal, prosedur lebih sesuai.
Atas ialah kandungan terperinci Bagaimanakah saya membuat dan menggunakan prosedur dan fungsi tersimpan dalam PL/SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!