오라클 PRAGMA
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 PRAGMA[편집]
컴파일러가 실행되기 전에 처리하는 전처리기 역할 PRAGMA를 사용하면 컴파일러는 런타임 때와는 다른 결과를 내도록 동작한다.
PL/SQL 블록의 선언부에 명시
1.1 PRAGMA AUTONOMOUS_TRANSACTION[편집]
트랜잭션 처리를 담당, 주 트랜잭션이나 다른 트랜잭션에 영향을 받지 않고 독립적으로 현재 블록 내부에서 변경사항을 COMMIT이나 ROLLBACK 지시.
1.1.1 사용가능 오브젝트[편집]
- Top-level (not nested) anonymous PL/SQL blocks
- Local, standalone, and packaged functions and procedures
- Methods of a SQL object type
- Database triggers
패키지 예시)
CREATE PACKAGE banking AS
FUNCTION balance (acct_id INTEGER) RETURN REAL;
END banking;
/
CREATE PACKAGE BODY banking AS
FUNCTION balance (acct_id INTEGER) RETURN REAL IS
PRAGMA AUTONOMOUS_TRANSACTION;
my_bal REAL;
BEGIN
NULL;
END;
END banking;
/
DROP PACKAGE banking;
트리거 예시)
CREATE TABLE anniversaries AS
SELECT DISTINCT TRUNC(hire_date) anniversary FROM employees;
ALTER TABLE anniversaries ADD PRIMARY KEY (anniversary);
CREATE TRIGGER anniversary_trigger
BEFORE INSERT ON employees FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO anniversaries VALUES(TRUNC(:new.hire_date));
-- Only commits the preceding INSERT, not the INSERT that fired
-- the trigger.
COMMIT;
EXCEPTION
-- If someone else was hired on the same day, we get an exception
-- because of duplicate values. That's OK, no action needed.
WHEN OTHERS THEN NULL;
END;
/
DROP TRIGGER anniversary_trigger;
DROP TABLE anniversaries;
1.2 PRAGMA EXCEPTION_INIT(예외명, 예외번호)[편집]
사용자 정의 예외 처리를 할 때 사용, 특정 예외번호를 명시해서 컴파일러에 이 예외를 사용한다는 것을 알리는 역할.
1.3 PRAGMA RESTRICT_REFERECES (서브 프로그램명, 옵션)[편집]
오라클 패키지를 사용할 때 선언해 놓으면 패키지에 속한 서브 프로그램(주로 함수에 사용)에서 옵션 값에 따라 특정 동작을 제한할 때 사용. 예를 들어, RNDS란 옵션을 주면 해당 서브 프로그램에서 테이블 데이터 쿼리를 제한하고, WNDS 옵션을 주면 테이블 데이터를 조작하지 못한다.
1.4 PRAGMA SERIALLY_RESUABLE[편집]
패키지 메모리 관리를 쉽게 할 목적으로 사용, 패키지에 선언된 변수에 대해 한 번 호출된 후 메모리를 해제. 즉 이 옵션을 설정하면 패키지 변수에 값을 할당하더라도 다음 번에 호출할 때는 할당한 값에 대한 메모리를 해제시켜 해당 변수는 초기화 값이나 NULL 값이 된다.