Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memanggil Satu Prosedur Tersimpan Oracle dari Dalam Satu Lagi?

Bagaimanakah Saya Boleh Memanggil Satu Prosedur Tersimpan Oracle dari Dalam Satu Lagi?

DDD
Lepaskan: 2024-12-24 15:20:11
asal
654 orang telah melayarinya

How Can I Call One Oracle Stored Procedure from Within Another?

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;
Salin selepas log masuk

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>);
Salin selepas log masuk

Sisipkan nama prosedur dalam kurungan, walaupun tiada hujah yang diluluskan.

CALL test_sp_1();
Salin selepas log masuk

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;
/
Salin selepas log masuk

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;
Salin selepas log masuk

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
Salin selepas log masuk

Output:

Testing
Test works
Testing
Test works
Testing
Test works
Salin selepas log masuk

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!

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