[SQL] 오라클의 다른와 저장 프로 시저를 호출
SQL오라클의 다른와 저장 프로 시저를 호출
사람은 방법을 알고 있는가, 또는 그것의 가능한 경우, 또 다른 내에서 저장 프로 시저를 호출? 그렇다면, 당신은 그것을 어떻게 할 것인가?
여기에 내 테스트 코드는 다음과 같습니다
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.귀하의 저장 프로 시저는 코딩 작업 할 수 있습니다. 문제는 당신의 저장 프로 시저 중 하나를 호출 할 수없는, 마지막 라인이다.
귀하의 저장 프로 시저는 코딩 작업 할 수 있습니다. 문제는 당신의 저장 프로 시저 중 하나를 호출 할 수없는, 마지막 라인이다.
SQL *의 세 가지 선택 플러스는 다음과 같습니다 전화, 간부 및 익명 PL / SQL 블록.
호출은 SQL 키워드로 표시하고, SQL 참조 서에 설명되어 있습니다. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG 구문 다이어그램은 인수가 호출 루틴으로 전달되지 않은 경우에도, parentesis가 필요하다는 것을 나타냅니다.
CALL test_sp_1();
익명 PL / SQL 블록 등 명명 된 프로 시저, 함수, 트리거, 내부 당신의 프로 시저를 호출 할 수 있습니다되지 않도록 PL / SQL이다.
BEGIN test_sp_1; END; /
Exec은 위의 익명 블록에 대한 바로 가기 인 SQL * 플러스 명령입니다. EXEC
로 BEGIN DB 서버로 전달됩니다 ; 종료; 전체 예 :
SQL> SET SERVEROUTPUT ON SQL> CREATE OR REPLACE PROCEDURE test_sp 2 AS 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE('Test works'); 5 END; 6 / Procedure created. SQL> CREATE OR REPLACE PROCEDURE test_sp_1 2 AS 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE('Testing'); 5 test_sp; 6 END; 7 / Procedure created. SQL> CALL test_sp_1(); Testing Test works Call completed. SQL> exec test_sp_1 Testing Test works PL/SQL procedure successfully completed. SQL> begin 2 test_sp_1; 3 end; 4 / Testing Test works PL/SQL procedure successfully completed. SQL>
-
==============================
2.물론, 당신은 특별한 구문은 없습니다의 SP 내에서 호출.
물론, 당신은 특별한 구문은 없습니다의 SP 내에서 호출.
전의:
PROCEDURE some_sp AS BEGIN some_other_sp('parm1', 10, 20.42); END;
절차가 실행 절차에있는 것과 다른 스키마에있는 경우, 당신은 스키마 이름으로 접두사해야합니다.
PROCEDURE some_sp AS BEGIN other_schema.some_other_sp('parm1', 10, 20.42); END;
-
==============================
3.SQLPLUS 명령 줄에서 프로 시저를 호출하려면 다음 중 하나를 수행하십시오 :
SQLPLUS 명령 줄에서 프로 시저를 호출하려면 다음 중 하나를 수행하십시오 :
CALL test_sp_1(); EXEC test_sp_1
-
==============================
4.@Michael 록우드는 - 당신은 키워드 "CALL"어디를 사용할 필요가 없습니다. 당신은 직접 프로 시저 호출을 언급 할 필요가있다.
@Michael 록우드는 - 당신은 키워드 "CALL"어디를 사용할 필요가 없습니다. 당신은 직접 프로 시저 호출을 언급 할 필요가있다.
그건
Begin proc1(input1, input2); end; /
대신에
Begin call proc1(input1, input2); end; /
-
==============================
5.다른 프로 시저에서 하나의 프로 시저를 호출 :
다른 프로 시저에서 하나의 프로 시저를 호출 :
정상적인 절차에 대한 하나의 :
CREATE OR REPLACE SP_1() AS BEGIN /* BODY */ END SP_1;
SP_2에서 프로 시저 SP_1 호출 :
CREATE OR REPLACE SP_2() AS BEGIN /* CALL PROCEDURE SP_1 */ SP_1(); END SP_2;
REFCURSOR 또는 출력 커서가있는 프로 시저를 호출 :
CREATE OR REPLACE SP_1 ( oCurSp1 OUT SYS_REFCURSOR ) AS BEGIN /*BODY */ END SP_1;
출력 매개 변수로 REFCURSOR을 반환 절차 SP_1 전화
CREATE OR REPLACE SP_2 ( oCurSp2 OUT SYS_REFCURSOR ) AS `enter code here` BEGIN /* CALL PROCEDURE SP_1 WITH REF CURSOR AS OUTPUT PARAMETER */ SP_1(oCurSp2); END SP_2;
from https://stackoverflow.com/questions/3415232/call-a-stored-procedure-with-another-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 Linq에 SQL로 표현에서 SQL GETDATE ()와 DATEADD ()를 사용합니까? (0) | 2020.04.19 |
---|---|
[SQL] SQL 쿼리 가까운 날짜를 표시합니다? (0) | 2020.04.19 |
[SQL] SQLSERVER에서 날짜와 타임 스탬프의 차이? [복제] (0) | 2020.04.19 |
[SQL] 자체 참조 테이블에 SQL 재귀 쿼리 (오라클) (0) | 2020.04.19 |
[SQL] 'dateAdded'에 대한 잘못된 기본값 (0) | 2020.04.19 |