> 데이터 베이스 > MySQL 튜토리얼 > 다른 Oracle 저장 프로시저 내에서 하나의 Oracle 저장 프로시저를 어떻게 호출할 수 있습니까?

다른 Oracle 저장 프로시저 내에서 하나의 Oracle 저장 프로시저를 어떻게 호출할 수 있습니까?

DDD
풀어 주다: 2024-12-24 15:20:11
원래의
670명이 탐색했습니다.

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

Oracle의 다른 항목 내에서 저장 프로시저 호출

Oracle에서는 하나의 저장 프로시저를 호출해야 하는 시나리오가 발생할 수 있습니다. 다른 것 안에. 이는 이 기사에서 살펴볼 다양한 방법을 사용하여 달성할 수 있습니다.

테스트 사례

다음 테스트 코드를 고려하세요.

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;
로그인 후 복사

문제 및 해결책

주어진 코드의 문제는 다음과 같습니다. 저장 프로시저를 직접 호출하려고 시도하는 마지막 줄입니다. 이 문제는 다음 세 가지 방법 중 하나를 사용하여 해결할 수 있습니다.

1. 호출 구문

Oracle의 SQL 참조에서는 저장 프로시저를 호출하는 구문을 다음과 같이 정의합니다.

CALL <procedure_name>(<argument_list>);
로그인 후 복사

인수가 전달되지 않은 경우에도 프로시저 이름을 괄호로 묶습니다.

CALL test_sp_1();
로그인 후 복사

2. 익명 PL/SQL 블록

익명 PL/SQL 블록에서는 명시적으로 이름을 지정하지 않고도 저장 프로시저를 호출할 수 있습니다.

BEGIN
    test_sp_1;
END;
/
로그인 후 복사

3. Exec 명령(SQL*Plus)

SQL*Plus는 익명 블록에 대한 바로 가기로 exec 명령을 제공합니다. 이는 익명 블록의 일부인 것처럼 지정된 저장 프로시저를 실행합니다.

EXEC test_sp_1;
로그인 후 복사

다음은 완전히 작동하는 예입니다.

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
로그인 후 복사

출력:

Testing
Test works
Testing
Test works
Testing
Test works
로그인 후 복사

위 내용은 다른 Oracle 저장 프로시저 내에서 하나의 Oracle 저장 프로시저를 어떻게 호출할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿