Rumah > pangkalan data > Oracle > teks badan

Oracle stored procedure execution sql

王林
Lepaskan: 2023-05-13 14:44:08
asal
3573 orang telah melayarinya

Prosedur tersimpan dalam pangkalan data Oracle ialah atur cara tersusun yang boleh meningkatkan kecekapan operasi pangkalan data dan keselamatan data dengan banyak. Prosedur tersimpan membolehkan pengguna merangkum logik perniagaan yang kompleks ke dalam blok kod boleh panggil untuk digunakan semula dengan mudah.

Dalam pembangunan prosedur tersimpan, melaksanakan penyata SQL ialah operasi penting. Artikel ini akan memperkenalkan kaedah dan teknik prosedur tersimpan Oracle untuk melaksanakan pernyataan SQL.

  1. Gunakan pernyataan SQL statik untuk melaksanakan SQL

Dalam prosedur tersimpan, cara paling asas untuk melaksanakan pernyataan SQL ialah menggunakan pernyataan SQL statik. Pernyataan SQL statik merujuk kepada pernyataan SQL yang ditentukan semasa menulis prosedur tersimpan dan boleh dilaksanakan secara langsung, contohnya:

CREATE OR REPLACE PROCEDURE test_proc
IS
BEGIN
  INSERT INTO test_table VALUES (1, 'test');
  COMMIT;
END;
/
Salin selepas log masuk

Dalam contoh di atas, pernyataan INSERT INTO statik dilaksanakan dalam prosedur tersimpan test_proc, dan data adalah Masukkan ke dalam jadual test_table.

  1. Gunakan pernyataan SQL dinamik untuk melaksanakan SQL

Pernyataan SQL statik boleh memenuhi keperluan kebanyakan situasi, tetapi dalam beberapa kes tertentu, pernyataan SQL dinamik perlu digunakan. Pernyataan SQL Dinamik merujuk kepada pernyataan SQL yang dijana secara dinamik berdasarkan parameter dan maklumat lain semasa masa jalan, contohnya:

CREATE OR REPLACE PROCEDURE test_proc2(p_id NUMBER)
IS
  v_sql VARCHAR2(200);
BEGIN
  v_sql := 'UPDATE test_table SET name = ''new_value'' WHERE id = ' || p_id;
  EXECUTE IMMEDIATE v_sql;
  COMMIT;
END;
/
Salin selepas log masuk

Dalam contoh di atas, prosedur tersimpan test_proc2 menjana pernyataan KEMASKINI dinamik berdasarkan parameter input p_id , dan menggunakan Perintah EXECUTE IMMEDIATE dilaksanakan. Perlu diingatkan bahawa apabila menggunakan pernyataan SQL dinamik, anda harus memberi perhatian kepada isu seperti suntikan SQL.

  1. Laksanakan berbilang pernyataan SQL

Dalam beberapa kes, adalah perlu untuk melaksanakan berbilang pernyataan SQL dalam prosedur tersimpan. Dalam Oracle, anda boleh menggunakan blok pernyataan BEGIN dan END untuk membentuk segmen kod dan memprosesnya bersama-sama. Contohnya:

CREATE OR REPLACE PROCEDURE test_proc3
IS
BEGIN
  INSERT INTO test_table VALUES (1, 'test1');
  INSERT INTO test_table VALUES (2, 'test2');
  COMMIT;
END;
/
Salin selepas log masuk

Dalam contoh di atas, dua penyataan INSERT INTO statik dilaksanakan dalam prosedur tersimpan test_proc3.

  1. Gunakan kursor untuk melaksanakan pernyataan SQL

Dalam prosedur tersimpan, kursor boleh digunakan untuk mengembalikan set hasil pertanyaan SQL kepada kod untuk pemprosesan selanjutnya. Kursor ialah struktur data yang boleh digunakan untuk menunjuk kepada satu atau lebih baris data dalam set hasil pertanyaan SQL. Penggunaan kursor memerlukan langkah berikut:

  1. Isytiharkan kursor dan pembolehubah kursor
  2. Laksanakan pertanyaan SQL dan simpan set hasil dalam pembolehubah kursor
  3. Gunakan pembolehubah kursor Memproses data
  4. Tutup kursor

Contohnya:

CREATE OR REPLACE PROCEDURE test_proc4
IS
  CURSOR c_test IS SELECT * FROM test_table;
  r_test c_test%ROWTYPE;
BEGIN
  OPEN c_test;
  LOOP
    FETCH c_test INTO r_test;
    EXIT WHEN c_test%NOTFOUND;
    
    DBMS_OUTPUT.PUT_LINE('ID: ' || r_test.id || ', NAME: ' || r_test.name);
  END LOOP;
  
  CLOSE c_test;
END;
/
Salin selepas log masuk

Dalam contoh di atas, pembolehubah kursor c_test diisytiharkan dalam prosedur tersimpan test_proc4 dan dibuka menggunakan pernyataan OPEN Cursor; gunakan pernyataan FETCH untuk mendapatkan baris data daripada pembolehubah kursor dan mengeluarkannya menggunakan DBMS_OUTPUT.PUT_LINE.

  1. Gunakan pembolehubah bind untuk melaksanakan pernyataan SQL

Pembolehubah bind ialah pembolehubah khas dalam pangkalan data Oracle yang boleh terikat kepada pernyataan SQL untuk mengelakkan SQL Injection dan isu lain untuk diperbaiki kebolehbacaan dan keselamatan kod. Penggunaan pembolehubah bind memerlukan langkah berikut:

  1. Tandakan pembolehubah yang perlu diikat dalam pernyataan SQL
  2. Isytiharkan nama pembolehubah dan taipkan pernyataan DECLARE bagi yang disimpan prosedur
  3. Gunakan pernyataan EXECUTE IMMEDIATE untuk mengikat pembolehubah dalam prosedur tersimpan

Contohnya:

CREATE OR REPLACE PROCEDURE test_proc5(p_id NUMBER)
IS
  v_sql VARCHAR2(200);
  v_name VARCHAR2(50);
BEGIN
  v_sql := 'SELECT name FROM test_table WHERE id = :id';
  EXECUTE IMMEDIATE v_sql INTO v_name USING p_id;
  
  DBMS_OUTPUT.PUT_LINE('NAME: ' || v_name);
END;
/
Salin selepas log masuk

Dalam contoh di atas, pembolehubah bind digunakan dalam prosedur tersimpan test_proc5, dan parameter input p_id ialah Pembolehubah :id dalam pernyataan SQL terikat, dan pernyataan EXECUTE IMMEDIATE digunakan untuk melaksanakan pertanyaan, dan keputusan pertanyaan disimpan dalam pembolehubah v_name.

Ringkasan

Menggunakan pernyataan SQL dalam prosedur tersimpan Oracle ialah operasi yang sangat biasa Artikel ini memperkenalkan pelaksanaan pernyataan SQL statik, pernyataan SQL dinamik, berbilang pernyataan SQL, kursor dan pembolehubah bind kaedah dan teknik penyataan. Dalam pembangunan sebenar, anda perlu memilih kaedah yang paling sesuai mengikut situasi tertentu, dan memberi perhatian kepada isu keselamatan seperti suntikan SQL.

Atas ialah kandungan terperinci Oracle stored procedure execution sql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan