programing

plsql 프로시저에서 sql 스크립트를 실행하는 방법

muds 2023. 9. 23. 23:11
반응형

plsql 프로시저에서 sql 스크립트를 실행하는 방법

다음과 같은 절차가 있습니다.

CREATE OR REPLACE PROCEDURE test is 
BEGIN

  DBMS_OUTPUT.PUT_LINE('This is a Test');
END;

현재 디렉토리에 저장된 sql 스크립트를 실행하고 싶습니다.sqlplus에서 '@scriptname'으로 실행할 수 있었습니다.sql' 하지만 절차 안에서 어떻게 할 수 있습니까?다음의 경우:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

  DBMS_OUTPUT.PUT_LINE('This is a Test');
  @scriptname.sql

END;

이것은 작동하지 않는 것 같습니다! pl/sql 프로시저에서 sql 스크립트를 실행할 수 있는 특정 사항이 있습니까?

일반적으로 pl/sql은 데이터베이스, 서버에서 실행되고 sqlplus는 클라이언트 프로세스이기 때문에 실행할 수 없습니다.서버는 클라이언트 및 파일과 동일한 시스템에 있어도 클라이언트가 참조하는 파일을 찾는 방법에 대해 아는 것은 말할 것도 없습니다.구문이 지원되고 지원되지 않더라도 sql 스크립트는 서버가 알고 액세스할 수 있는 위치에 있는 서버에 있어야 합니다.

실제로 SQL*Plus에서 이 작업을 수행할 수 있습니다. @가 행의 첫 번째 문자인지 확인하기만 하면 됩니다. 예:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

    DBMS_OUTPUT.PUT_LINE('This is a Test');
@scriptname.sql

END;

SQL*Plus는 스크립트의 전체 내용을 읽고 프로시저의 해당 시점에 삽입한 다음 프로시저를 지정된 대로 작성합니다.즉, SQL*Plus 명령어를 사용할 수 없습니다.scriptname.sql. 또한 @scriptname에 대한 언급도 없을 것입니다.데이터베이스에 작성된 실제 프로시저에서 sql.

OS 명령을 실행하여 SQLPlus를 시작하고 스크립트를 실행하도록 할 수 있습니다.시작할 때 파일 이름을 SQLplus에 전달하면 실행됩니다.

Google 외부 절차 및 extproc 또는 이 기사입니다.아니면 자바로 OS를 호출하는 명령 같은 것.

Java Stored Procedure를 작성하여 파일을 열고 해당 내용을 String으로 반환한 다음 해당 String에서 즉시 실행을 호출할 수 있습니다.

파일에 있는 악의적인 sql은 원하는 대로 할 수 있으므로 이 작업을 매우 주의해야 합니다.

해결책이 있다고 해도, 저는 이것을 추천하고 싶지 않습니다.PL/SQL 프로시저는 기본적으로 SQL 스크립트입니다.1. 셸 스크립트를 통해 데이터베이스 외부에서 SQL 스크립트를 실행하거나 2. 절차 내부에서 SQL 코드를 이동합니다.

언급URL : https://stackoverflow.com/questions/4772500/how-to-run-sql-scripts-from-a-pl-sql-procedure

반응형