메뉴 건너뛰기

조회 수 15045 추천 수 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
번호 제목 날짜 조회 수
21 TOAD 에서 SQL Builder 을 사용하여 DML 문서 작성을 자동화 해본다 file 2016.08.30 7508
20 Toad 사용시 캐릭터 인코더 UTF-8 로 변경하기 file 2016.08.30 10086
19 Oracle 에서 NVL, NVL2 함수 사용하는 예제 2016.08.30 8336
18 rownum 으로 범위지정을 해주고 싶을 때 2016.08.30 8624
17 Oracle 시퀀스 생성, 추가, 삭제 file 2016.08.30 8152
16 TOAD 에서 Edit 를 통해 sql문을 작성할때 참고해야할 View file 2016.08.30 7468
15 UNION ALL 과 ORDER BY 섞어서 쓰기 2016.08.30 9899
14 오라클(Oracle) 대용량 데이터 토드(Toad)를 이용해서 넣기 file 2016.08.30 8031
13 간단한 쿼리로 일련번호 쉽게 넣기 - ROWNUM 사용 file 2016.08.29 9472
12 Oracle에서 ORA-28000: 계정이 잠금되었습니다. - 해결 방법 file 2016.08.29 7323
11 WHERE절에서 Null 값 비교하기 file 2016.08.29 9354
10 Oracle에서 Foreign Key가 걸려있는 컬럼값 업데이트(update) 하기 file 2016.08.29 9176
9 Oracle에서 사용자가 생성한 모든 Table, View를 삭제하는 쿼리 만들기 file 2016.08.29 7468
8 Oracle에서 세자리 콤마 찍기 file 2016.08.29 11720
7 Merge into를 이용해서 insert나 update를 자동으로 실행하자. 2016.08.29 7572
6 조건절에 WHERE 1=1, WHERE 1=0 사용하여 쿼리 간편하게 사용하기 file 2016.08.29 9617
5 Oracle에서 중복 조인을 피하기 위한 Update 방법 (MERGE 사용) 2016.08.29 8145
4 단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법 2016.08.29 9403
3 WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자. 2016.08.29 8379
2 Oracle 저장 프로시저 샘플 2016.08.29 7140
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved