DATABASE(oracleDB 11g)/PLSQL 15

[PL/SQL]혼합, DDL, DB 이벤트 트리거(TRIGGER) 생성

혼합, DDL, DB 이벤트 트리거(TRIGGER) 생성 혼합 트리거- 실행되는 문장 앞,뒤 실행되는 문장이 영향을 주는 각 행앞 또는 뒤 이 네가지 지점에 대한 작업을 각각 지정하는데 사용 할 수 있는 테이블의 단일 트리거이다.- 혼합 트리거는 DML트리거여야만 한다.- 테이블이나 뷰에 정의 DDL문의 트리거- 다음의 구문을 사용12345CREATE [OR REPLACE] TRIGGER trigger_nameBEFORE | AFTER -- Timing[ddl_event1 [OR ddl_event2 OR ...]]ON {DATABASE | SCHEMA}trigger_bodycs - DB가 시작 종료, 에러가 발생할때 등의 상황에서 사용된다. 데이터베이스 이벤트 트리거- 데이터 보안 향상에 도움이 된다.-..

[PL/SQL]트리거의 기초

트리거의 기초 트리거란?- 데이터베이스에 save되어있고 select된 event에대한 응답으로 실행되는 PL/SQL block.- TABLE, VIEW, SCHEMA, DATABASE에 정의가능. 트리거 이벤트 유형- DML- DDL- DATABASE 작업(SERVERERROR, LOGON/OFF, STARTUP/DOWN ...) 트리거 사용의 예시- SECURITY- AUDIT(감사)- 무결성(데이터/참조)- TABLE의 복제- EVENET LOGGING- 데이터들의 자동적인 계산 문장트리거- 무조건 명령어 단위로 트리거 실행EX)DEPT 테이블에서 DEPTNO = 50인 조건의 명령어 실행시 실행됨. 행트리거- 조건을 만족하는 행 갯수 별로 트리거가 실행EX)DEPT 테이블에서 DEPTNO = 50..

[PL/SQL]컬렉션 사용의 기초

컬렉션 사용의 기초 연관배열(INDEX BY 테이블)이란- Primary Key(정수 or 문자열)와 scalar 또는 record 타입의 데이터가 있는 PL/SQL 컬렉션 다음과 같은 구문으로 연관배열을 생성한다.1234567TYPE type_name IS TABLE OF {column_type | variable%TYPE | table.column%TYPE} [NOT NULL] | table%ROWTYPE | INDEX BY PLS_INTEGER | BINARY_INTEGER | VARCHAR2();identifier type_name;cs 구문 설명 type_name 테이블 유형의 이름 column_type VARCHAR2, DATE, VARCHAR, NUMBER 또는 % TYPE과 같은 스칼라 또..

[PL/SQL]코드 설계 고려 사항 기초

코드 설계 고려 사항 기초 상수 및 예외 표준화- Package Spec으로 구현- 장점 - 일관성 - 재사용 증가 - 유지관리 간편 - 회사 표준 구현- 대상 - 예외 이름 - 상수 정의 로컬 서브 프로그램- 서브 프로그램의 선언 섹션 끝에 정의된 프로시져 또는 함수 정의자 권한- 생성자의 권한으로 프로그램 실행- 프로시저 실행 권한만 필요- 작업을 진행 했다면 하나의 프로시져에서 테이블을 delete할 수 있는 명령어를 썼다면 DELETE TABLE으로 해야하는데 이때 TABLE은 user이름을 생략하면 자신의 TABLE로 처 리 한다. 호출자권한- 호출자의 권한으로 프로그램 실행- 프로시저에 액세스하는 기본객체에 대한 권한필요.- 이경우에서 위와 같은 작업을 진행하면 사용되는 이름은 호출자의 스키마..

[PL/SQL]동적 SQL의 기초

동적 SQL의 기초 실행계획다음의 세 구문은 결과가 같다.12345678SELECT * FROM EMP WHERE DEPTNO = 10; SELECT * FROM EMP WHERE DEPTNO = 10; SELECT * FROM EMPWHERE DEPTNO = 10;cs하지만 이 구문은 같다고 할 수있을까? 엄밀히 말하면 같다고 말할 수 없다.12SELECT * FROM V$SQLWHERE SQL_TEXT LIKE 'SELECT * FROM EMP %';cs이 구문을 사용하면, SQL_ID를 알 수 있고 이것을 이용해서 123SELECT *FROM V$SQL_PLANWHERE SQL_ID = '8xnv6u5p3pxjf';cs를 이용하면, 실행 계획을 볼 수 있다. 맨위의 세 구문은 각각의 SQL_ID가 ..

[PL/SQL]패키지 작업의 기초

패키지 작업의 기초 서브 프로그램 오버로드- 동일한 이름의 서브 프로그램을 두 개 이상 생성하는 것을 말한다.- 이러한 서브 프로그램들은 서로 형식 파라미터의 개수와 순서, 데이터 타입이 달라야한다. 프로시저의 잘못된 참조블록 구조는 식별자를 참조하기 전에 선언해야함.다음 예시를 보자123456789101112CREATE OR REPLACE PACKAGE BODY TESTTEST IS PROCEDURE TEST1 IS BEGIN TEST2 ; END TEST1 ; PROCEDURE TEST2 IS BEGIN NULL ; END TEST2 ;END TESTTEST ;/Colored by Color Scriptercs이경우 사전 선언이 잘못도되어 있으므로 4번째 라인의 TEST2에서 에러가 발생한다.이럴경우..

[PL/SQL]예외처리의 기초

예외처리의 기초 예시를 먼저 보도록 하자. 시작하기 앞서, 테이블에 제약조건을 추가하자.12ALTER TABLE empADD CONSTRAINT emp_ck CHECK ( sal > 0 ) ;cs 제약조건 때문에 다음의 구문은 ERROR가 발생한다.123UPDATE empSET sal = 0WHERE empno = 7934 ;cs 다음의 PL/SQL 블록은 비정상 종료가 이뤄진다.1234567891011BEGIN UPDATE emp SET sal = 3000 WHERE empno = 7782 ; UPDATE emp SET sal = 0 WHERE empno = 7934 ;END ;/--블록 내에서 ERROR 발생시 블록 전체가 ROLLBACK된다.(비정상 종료)cs 하지만 다음과 같이 예외처리를 해주면1..

[PL/SQL]명시적 커서 기초

명시적 커서 기초 ###내용 보충 필요 다음의 예시는 결과가 전부 같다. 일반적인 커서1234567891011121314151617181920212223DECLARE CURSOR CUR_DEPT IS SELECT DEPTNO, DNAME, LOC, 0 AS SUM_SAL FROM DEPT ; REC_DEPT CUR_DEPT%ROWTYPE ; BEGIN OPEN CUR_DEPT; LOOP FETCH CUR_DEPT INTO REC_DEPT; EXIT WHEN CUR_DEPT%NOTFOUND; SELECT SUM(SAL) INTO REC_DEPT.SUM_SAL FROM EMP WHERE DEPTNO = REC_DEPT.DEPTNO; INSERT INTO COPY_DEPT VALUES REC_DEPT ; EN..

[PL/SQL]조합 데이터 유형 작업 기초

조합 데이터 유형 작업 기초 레코드를 생성하는 구문은 다음과 같다.12TYPE type_name IS RECORD (field_declaration[, field_declaration]…);cs 1identifier type_name;cs 블록에서 모든 컬럼을 가져올때 다음과 같은 방법으로 사용한다.12DECLAREidentifier reference%ROWTYPE;cs 12345678DECLARE rec_emp emp%rowtype;BEGIN SELECT * INTO rec_emp FROM emp WHERE empno = 7788;END;cs 하지만 많은 컬럼을 가지고있는 테이블에서 여러개의 컬럼을 가져올경우 다음과 같은 방법을 사용한다.1234567891011121314151617DECLARE TYP..

[PL/SQL]제어구조문의 기초

제어구조문의 기초 IF 문기본적인 구문은1234567IF condition THEN statements;[ELSIF condition THEN statements;][ELSE statements;]END IF;cs으로 작성한다. 아마 프로그래밍을 조금이라도 경험한 사람이라면 이 형식은 굉장히 익숙하게 느껴질 것이다. 구문 설명 condition T,F,NULL을 반환하는 변수 또는 표현식 THEN 부울표현식을 뒤의 명령문 시퀀스와 연관시키는 절을 시작 statements 조건이 TRUE인 경우 실행되는 문장 CASE 식기본적인 구문은1234567CASE selector WHEN expression1 THEN result1 WHEN expression2 THEN result2 ... WHEN express..