Rumah > Artikel > pangkalan data > Contoh yang menunjukkan cara menggunakan SQL dinamik dalam prosedur tersimpan Oracle
SQL dinamik prosedur tersimpan Oracle
Pangkalan data Oracle ialah sistem pangkalan data hubungan yang sangat berkuasa yang menyokong prosedur tersimpan dan SQL dinamik. Prosedur tersimpan ialah cara untuk mencipta kod boleh guna semula dalam pangkalan data, manakala SQL dinamik ialah teknik untuk menjana pernyataan SQL berdasarkan pembolehubah atau parameter pada masa jalan. Menggabungkan kedua-dua teknologi ini boleh menjadikan prosedur tersimpan kami lebih fleksibel dan pintar.
Dalam prosedur tersimpan Oracle, senario SQL dinamik yang paling biasa ialah menjana pernyataan SQL secara dinamik berdasarkan keadaan berbeza untuk mencapai fungsi pertanyaan yang berbeza. Dengan cara ini, kami boleh menjana kenyataan SQL yang sepadan secara dinamik pada masa jalan mengikut keperluan yang berbeza untuk menanyakan data yang diperlukan. Di bawah, kami menggunakan contoh mudah untuk menunjukkan cara menggunakan SQL dinamik dalam prosedur tersimpan Oracle.
Dalam Oracle, terdapat fungsi pelaksanaan SQL dinamik EXECUTE IMMEDIATE, yang boleh melaksanakan pernyataan SQL yang dijana secara dinamik. Prototaip fungsi adalah seperti berikut:
LAKSANAKAN rentetan_dinamik SEGERA [ INTO { define_variable [, define_variable]... | record } ];
di mana dynamic_string mewakili pernyataan SQL yang dijana secara dinamik mewakili a pembolehubah yang ditakrifkan. Jika klausa INTO ditentukan, pernyataan SQL yang dijana secara dinamik dilaksanakan dan hasilnya disimpan dalam define_variable. Jika klausa INTO tidak dinyatakan, pernyataan SQL yang dijana secara dinamik akan dilaksanakan secara langsung.
Pertimbangkan keperluan mudah, kami perlu menanyakan maklumat pekerja berdasarkan syarat yang berbeza. Kita boleh mencapai ini melalui prosedur tersimpan berikut:
BUAT ATAU GANTIKAN PROSEDUR EMPLOYEE_QUERY(P_DEPTID IN NUMBER, P_JOBID IN VARCHAR2)
IS
DYNAMIC_SQL VARCHAR2 - SQL Define(4000); 🎜 > CURSOR_EMP SYS_REFCURSOR; -- Takrifkan pembolehubah kursor
BERMULA
-- Menjana penyataan SQL secara dinamik
DYNAMIC_SQL := 'PILIH EMPLOYEE_ID, FIRST_NAME, LAST_NAME, PEKERJA'1 TARIKH KERJA > JIKA P_DE PTID TIDAK NULL MAKA
DYNAMIC_SQL := DYNAMIC_SQL || ' AND DEPARTMENT_ID = :deptid';JIKA P_JOBID TIDAK NULL MAKA
DYNAMIC_SQL := DYNAMIC_SQL || ' AND JOB_ID = :jobid';
--Laksanakan dynamic SQL
JIKA P_DEPTID BUKAN NULL DAN P_JOBID BUKAN NULL MAKAOPEN CURSOR_EMP FOR DYNAMIC_SQL USING P_DEPTID, P_JOBID;ELSIF P_JOBID
OPEN CURSOR_EMP FOR DYNAMIC_SQL USING P_DEPTID;LAIN
OPEN CURSOR_EMP FOR DYNAMIC_SQL USING P_JOBID;TAMAT JIKA;-- Output hasil pertanyaan
OPEN CURSOR_EMP FOR DYNAMIC_SQL;DBMS_OUTPUT.PUT_LINE('PEKERJA_ID' || CHR(9) || 'FIRST_NAME' ||. CHR( 9) ||. 'LAST_NAME' ||.
TUTUP CURSOR_EMP;
END;
Dalam contoh di atas, kami mula-mula mentakrifkan pernyataan pertanyaan SQL dinamik DYNAMIC_SQL, yang secara dinamik menjana pernyataan pertanyaan SQL yang sepadan berdasarkan parameter input. Kami kemudiannya melaksanakan pernyataan SQL yang dijana secara dinamik melalui fungsi EXECUTE IMMEDIATE dan menyimpan hasil pertanyaan menggunakan pembolehubah kursor CURSOR_EMP. Akhir sekali, kami mengeluarkan hasil pertanyaan melalui pembolehubah kursor.
FETCH CURSOR_EMP INTO VAR_EMPLOYEE_ID, VAR_FIRST_NAME, VAR_LAST_NAME, VAR_HIRE_DATE; EXIT WHEN CURSOR_EMP%NOTFOUND; DBMS_OUTPUT.PUT_LINE(VAR_EMPLOYEE_ID || CHR(9) || VAR_FIRST_NAME || CHR(9) || VAR_LAST_NAME || CHR(9) || TO_CHAR(VAR_HIRE_DATE, 'YYYY-MM-DD'));
Atas ialah kandungan terperinci Contoh yang menunjukkan cara menggunakan SQL dinamik dalam prosedur tersimpan Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!