행위

오라클 PRAGMA

DB CAFE

thumb_up 추천메뉴 바로가기


1 PRAGMA[편집]

컴파일러가 실행되기 전에 처리하는 전처리기 역할 PRAGMA를 사용하면 컴파일러는 런타임 때와는 다른 결과를 내도록 동작한다.

PL/SQL 블록의 선언부에 명시

1.1 PRAGMA AUTONOMOUS_TRANSACTION[편집]

트랜잭션 처리를 담당, 주 트랜잭션이나 다른 트랜잭션에 영향을 받지 않고 독립적으로 현재 블록 내부에서 변경사항을 COMMIT이나 ROLLBACK 지시.

1.1.1 사용가능 오브젝트[편집]

  1. Top-level (not nested) anonymous PL/SQL blocks
  2. Local, standalone, and packaged functions and procedures
  3. Methods of a SQL object type
  4. 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 값이 된다.