메뉴 건너뛰기

조회 수 15114 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

PL/SQL(Procedure, Package)을 사용하다 보면 동적으로 쿼리(Query)를 생성하거나 텍스트(text) 쿼리를 입력 받아서 실행해야하는 경우가 있다다음 두가지 방법을 적절히 사용하면 좋은 결과를 얻을수 있다.

 

EXECUTE IMMEDIATE : Inset, Update, Delete 구문을 실행하거나 Select 구문을 실행 시 INTO를 사용하여 단일 값을 리턴 받을 때 사용

 

OPEN-FOR : Select 구문을 실행 시 Cursor를 리턴 받을 때 사용

 

주의 바인드 변수(:) 사용 시 쿼리 내부에서 변수명은 의미가 없고 변수 순서, 개수가 USING의 변수 순서, 개수와 일치해야 한다. 바인드 변수가 없다면 USING는 생략가능.

 

1. EXECUTE IMMEDIATE (INSERT, UPDATE, DELETE  등 구문 실행)

 

CREATE OR REPLACE PROCEDURE

PC_SET_HOLIDAY ( in_hldy_dte in date

, in_hldy_nm in varchar2

, in_use_yn in varchar2)

IS

v_query varchar(1000);

d_sysdate date;

BEGIN

BEGIN

-- 단일 값을 리턴받을때

EXECUTE IMMEDIATE 'SELECT SYSDATE FROM DUAL' INTO d_sysdate;

END;

 

v_query := v_query || 'INSERT INTO HOLIDAY';

v_query := v_query || ' VALUES(:1,:2,:3,:4)';

 

BEGIN

-- INSERT, UPDATE, DELETE 구문 실행

EXECUTE IMMEDIATE v_query

USING in_hldy_dte, in_hldy_nm, in_use_yn, d_sysdate;

END;

END;

 

 

2. OPEN-FOR (CURSOR를 리턴 받을 때)

 

CREATE OR REPLACE PROCEDURE

PC_GET_HOLIDAY ( in_fromdate in varchar2

, in_todate in varchar2

, out_cursor out SYS_REFCURSOR)

IS

v_query varchar(1000);

BEGIN

v_query := v_query || 'SELECT HLDY_DTE, HLDY_NM';

v_query := v_query || ' FROM HOLIDAY';

v_query := v_query || ' WHERE HLDY_DTE BETWEEN :in_fromdate';

v_query := v_query || ' AND :in_todate';

 

BEGIN

-- CURSOR를 리턴 받을때

OPEN out_cursor FOR v_query

USING in_fromdate, in_todate;

END;

END;

 

 

 

 

 


List of Articles
번호 제목 날짜 조회 수
41 오라클(PL/SQL) 미리 정의된 예외처리 2016.12.08 7279
40 오라클 해당 월 의 맨첫날 ~ 마지막 일 가져 오는 쿼리 2016.12.08 8482
39 오라클 암호 초기화 및 사용자 생성 2016.12.08 8714
38 관리자( SYSTEM, SYS) 계정 비밀번호를 잊어버렸을때.. file 2016.12.08 8396
37 ORA-28001: the password has expired - 추천 실적용 실전 2016.12.08 9636
36 계층형 쿼리의 응용 - 달력만들기 file 2016.12.08 8570
35 계층형 쿼리의 응용 - 답변형 계시판 file 2016.12.08 8822
34 날짜관련 계산하기(1) file 2016.12.08 8157
33 [Oracle 12g] 설치 후 오라클 관리자 계정 접속하기 file 2016.12.08 10817
32 [Oracle 12] ORA-01950: 테이블스페이스 'USERS'에 대한 권한이 없습니다. file 2016.12.08 8629
31 Oracle 11g Database에 외부 접속 허용하도록 설정하기 file 2016.12.08 24983
30 Oracle 11g Client Install 및 외부 클라이언트 도구의 사용 file 2016.12.08 71041
29 [Oracle SQL] 여러 행(ROW)을 하나의 컬럼(COLUMN)으로 합치기 (WM_CONCAT) file 2016.12.08 20079
28 오늘을 기준으로 해당주(week)의 모든 일자조회 2016.12.08 7085
27 구분자로 자르기 (Split) file 2016.12.08 20642
26 기간내 모든 날자(일자) 구하기 2016.12.08 7437
25 [Oracle|오라클] 한글 초성 검색 함수 2016.12.08 9158
24 실수로 지운 데이터 복구 쿼리 (TIMESTAMP) 2016.12.08 11217
23 INSTR 문자열의 뒤(마지막)에서 부터 문자 찾기 (right to left, last) file 2016.12.08 14991
» 동적쿼리(Dynamic SQL) 사용법 (텍스트 쿼리) file 2016.12.08 15114
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved