Memanggil Prosedur Tersimpan dari Dalam Orang Lain dalam Oracle
Dalam Oracle, seseorang mungkin menghadapi senario di mana perlu untuk menggunakan satu prosedur tersimpan daripada dalam yang lain. Ini boleh dicapai menggunakan pelbagai kaedah, yang akan kami terokai dalam artikel ini.
Kes Ujian
Pertimbangkan kod ujian berikut:
SET SERVEROUTPUT ON; DROP PROCEDURE test_sp_1; DROP PROCEDURE test_sp; CREATE PROCEDURE test_sp AS BEGIN DBMS_OUTPUT.PUT_LINE('Test works'); END; / CREATE PROCEDURE test_sp_1 AS BEGIN DBMS_OUTPUT.PUT_LINE('Testing'); test_sp; END; / CALL test_sp_1;
Masalah dan Penyelesaian
Isu dengan kod yang diberikan terletak pada baris terakhir, yang percubaan untuk menggunakan secara langsung prosedur yang disimpan. Ini boleh diselesaikan dengan menggunakan salah satu daripada tiga kaedah berikut:
1. Sintaks Panggilan
Rujukan SQL Oracle mentakrifkan sintaks untuk memanggil prosedur tersimpan seperti berikut:
CALL <procedure_name>(<argument_list>);
Sisipkan nama prosedur dalam kurungan, walaupun tiada hujah yang diluluskan.
CALL test_sp_1();
2. Blok PL/SQL Tanpa Nama
Dalam blok PL/SQL tanpa nama, seseorang boleh memanggil prosedur tersimpan tanpa menamakannya secara jelas.
BEGIN test_sp_1; END; /
3. Perintah Exec (SQL*Plus)
SQL*Plus menyediakan arahan exec sebagai pintasan untuk blok tanpa nama. Ia melaksanakan prosedur tersimpan yang ditentukan seolah-olah ia adalah sebahagian daripada blok tanpa nama.
EXEC test_sp_1;
Contoh
Berikut ialah contoh yang berfungsi sepenuhnya:
SET SERVEROUTPUT ON; CREATE OR REPLACE PROCEDURE test_sp AS BEGIN DBMS_OUTPUT.PUT_LINE('Test works'); END; / CREATE OR REPLACE PROCEDURE test_sp_1 AS BEGIN DBMS_OUTPUT.PUT_LINE('Testing'); test_sp; END; / CALL test_sp_1(); -- Direct call exec test_sp_1; -- SQL*Plus shortcut BEGIN test_sp_1; END; -- Anonymous PL/SQL block
Output:
Testing Test works Testing Test works Testing Test works
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Satu Prosedur Tersimpan Oracle dari Dalam Satu Lagi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!