Oracle Stored Procedure Dynamic SQL
Oracle 데이터베이스는 저장 프로시저와 동적 SQL을 지원하는 매우 강력한 관계형 데이터베이스 시스템입니다. 저장 프로시저(Stored Procedure)는 데이터베이스에서 재사용 가능한 코드를 생성하는 방법인 반면, 동적 SQL(Dynamic SQL)은 런타임 시 변수나 매개변수를 기반으로 SQL 문을 생성하는 기술입니다. 이 두 가지 기술을 결합하면 저장 프로시저를 더욱 유연하고 지능적으로 만들 수 있습니다.
Oracle 저장 프로시저에서 동적 SQL의 가장 일반적인 시나리오는 다양한 쿼리 기능을 달성하기 위해 다양한 조건을 기반으로 SQL 문을 동적으로 생성하는 것입니다. 이러한 방식으로 필요한 데이터를 쿼리해야 하는 다양한 요구에 따라 런타임 시 해당 SQL 문을 동적으로 생성할 수 있습니다. 아래에서는 간단한 예를 사용하여 Oracle 저장 프로시저에서 동적 SQL을 사용하는 방법을 보여줍니다.
오라클에는 동적으로 생성된 SQL 문을 실행할 수 있는 동적 SQL 실행 함수인 EXECUTE IMMEDIATE가 있습니다. 함수 프로토타입은 다음과 같습니다.
EXECUTE IMMEDIATE 동적_문자열 [ INTO { 정의변수 [, 정의변수]... | 레코드 } ]
그 중 동적_문자열은 정의된 변수를 나타냅니다. INTO 절을 지정하면 동적으로 생성된 SQL 문이 실행되고 결과가 Define_variable에 저장됩니다. INTO 절을 지정하지 않으면 동적으로 생성된 SQL 문이 직접 실행됩니다.
간단한 요구 사항을 고려하면 다양한 조건에 따라 직원 정보를 쿼리해야 합니다. 다음 저장 프로시저를 통해 이를 수행할 수 있습니다.
CREATE OR REPLACE PROCEDURE EMPLOYEE_QUERY(P_DEPTID IN NUMBER, P_JOBID IN VARCHAR2)
IS
DYNAMIC_SQL VARCHAR2(4000) -- 동적 SQL 문 정의
CURSOR_EMP SYS_REFCURSOR;
BEGIN
-- 동적으로 SQL 문 생성
DYNAMIC_SQL := 'SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE FROM EMPLOYEES WHERE 1=1';
IF P_DEPTID IS NOT NULL THEN
DYNAMIC_SQL := DYNAMIC_SQL || ' AND DEPARTMENT_ID = :deptid';
END IF;
IF P_JOBID IS NOT N ULL THEN
DYNAMIC_SQL := DYNAMIC_SQL || ' AND JOB_ID = :jobid';
END IF;
--P_DEPTID가 NULL이 아니고 P_JOBID가 NULL이 아닌 경우 동적 SQL을 실행합니다. THEN
OPEN CURSOR_EMP FOR DYNAMIC_SQL USING P_DEPTID, P_JOBID;ELSIF P_DEPTID IS NOT NULL THEN
OPEN CURSOR_EMP FOR DYNAMIC_SQL USING P_DEPTID;ELSIF P_JOBID가 NULL이 아닙니다. THEN
OPEN CURSOR_EMP FOR DYNAMIC_SQL USING P_JOBID;ELSE
아아아아
END IF;-- 쿼리 결과 출력 DBMS_OUTPUT.PUT_LINE('EMPLOYEE_ID' || CHR(9) || 'FIRST_NAME' || CHR(9) || 'LAST_NAME' || CHR(9) || ' HIRE_DATE' );
LOOP
OPEN CURSOR_EMP FOR DYNAMIC_SQL;END LOOP;-- 커서 닫기
CLOSE CURSOR_EMP;
END;
위 내용은 Oracle 저장 프로시저에서 동적 SQL을 사용하는 방법을 보여주는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!