목록Programming/Oracle 공부 (31)
C#,Delphi,Oracle,MSSQL 개발자블로그
트리거 본문을 코딩하기 전에 트리거의 구성 요소를 결정해야 한다. 시스템 이벤트에 대한 트리거는 데이터베이스 또는 스키마 레벨에서 정의할 수 있다. 예를 들어, 데이터베이스 종료 트리거는 데이터베이스 레벨에서 정의하며 DDL 문의 트리거 및 사용자 로그온 / 로그아웃 데이터베이스 레벨 또는 스키마 레벨에서 정의할 수 있다. DML문의 트리거는 특정 테이블 또는 뷰에서 정의한다. 데이터베이스 레벨에서 정의한 트리거는 모든 사용자에 대해 실행되지만 스키마 레벨이나 테이블 레벨에서 정의한 트리거는 이벤트가 해당 스키마 또는 테이블과 관련된 경우에만 실행된다. ● DDL 문에 트리거 작성 CREATE [OR REPLACE] TRIGGER trigger_name timing [ddl_event1 [OR ddl_e..
● 트리거 - 데이터베이스 트리거 연결된 사용자 또는 사용되는 응용 프로그램과 상관없이 INSERT, UPDATE, DELETE 문 등의 트리거 문이 관련 테이블에 대해 실행될 때 암시적으로 실행된다. - 응용 프로그램 트리거 응용 프로그램에서 특정 이벤트가 발생할 때마다 암시적으로 실행된다. 특정 작업을 수행할 때 관련 작업도 수행하려면 트리거를 사용할 수 있다. 트리거를 과다하게 사용하면 상호 종속성이 복잡해져 대형 응용프로그램에서 트리거를 유지 관리하기가 어렵다. 필요할 때만 트리거를 사용하고 순환 및 계단식 효과를 주의해야한다. ● 데이터베이스 트리거 구성요소. 구성 요소 설명 가능한값 트리거 타이밍 트리거 이벤트에 따라 트리거를 실행하는 시기입니다. BEFORE AFTER INSTEAD OF 트..
● DBMS_PIPE 패키지 내부 세션 통신을 위한 알고리즘을 제공한다.(보안은 되지 않는다.) - 패키지에 포함된 일부 프로시저/함수 → PACK_MESSAGE → SEND_MESSAGE → RECEIVE_MESSAGE → UNPACK_MESSAGE 함수 또는 프로시저 설명 PACK_MESSAGE (프로시저) SEND_MESSAGE 함수로 보낼 항목(VARCHAR2, NUMBER 또는 DATE 유형 항목)을 로컬 메시지 버퍼에 압축합니다. SEND_MESSAGE (함수) 로컬 메시지 버퍼에 들어 있는 메시지를 명명된 파이프로 보냅니다. RECEIVE_MESSAGE (함수) 명명된 파이프에서 메시지를 검색하여 로컬 메시지 버퍼에 넣고 UNPACK 프로시저로 압축을 풉니다. UNPACK_MESSAGE 로컬..
● 오버로드 하나의 패키지 내의 여러 서브프로그램은 동일한 이름을 사용할 수 있다. 동일한 이름의 여러 서브프로그램을 구분하려면 형식 매개변수 개수, 순서 또는 테이터 유형 계열은 달라져야 한다. - 제한사항 : 로컬 또는 패키지 서브프로그램만 오버로드 할 수 있다. Ex. - 패키지 명세 작성. CREATE OR REPLACE PACKAGE over_pack IS PROCEDURE add_dept (v_deptno IN dept.deptno%TYPE, v_name IN dept.dname%TYPE DEFAULT 'unknown', v_loc IN dept.loc%TYPE DEFAULT 'unknown'); PROCEDURE add_dept (v_name IN dept.dname%TYPE DEFAULT ..
● 패키지 - 논리적으로 관련된 PL/SQL 유형, 항목 및 서브 프로그램을 하나의 컨테이너로 묶는다. Ex. HR 패키지에는 채용 및 해고 프로시저, 커시면 및 보너스 함수, 비과세 변수 등이 들어있을 수 있다. - 명세(Specification), 몸체(Body)의 두 부분으로 구성된다. - 호출 또는 중첩하거나 매개변수를 지급할 수 없다. - 패키지 PL/SQL 생성자를 호출하면 전체 패키지가 메모리에 로드되므로 나중에 관련 생성자를 호출할 때 디스크 I/O가 필요하지 않다. - 패키지 명세는 패키지 몸체 없이 존재할 수 있지만, 패키지 몸체는 패키지 명세 없이 존재할 수 없다. - 패키지에 통합한 독립형 프로시저는 삭제해야 한다. ● 패키지 명세 작성 CREATE [OR REPLACE] PACKA..
● 내장 함수 - 내장 함수는 매개변수를 사용하여 호출할 수 있는 명명된 PL/SQL 블록이며, 일반적으로 값을 계산할 때 사용한다. - 함수와 프로시저는 호출 환경으로 값을 반환해야 한다는 점을 제외하면 구조가 동일하다. (IN 매개변수모드 사용) - 함수 헤더에는 RETURN 절이 있어야 하며, 실행 부분에는 RETURN 문이 하나이상 있어야 한다. CREATE [OR REPLACE] FUNCTION function_name (parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, ...) RETURN datatype IS/AS PL/SQL Block; - RETURN 데이터 유형에는 크기 사양이 포함될 수 없다. - 함수의 PL/SQL 블록에서는 ..
* 2단원은 Procedure Builder 사용에 관한 내용이므로 생략. ● 프로시저란? 매개변수(인수)를 사용하여 호출할 수 있는 명명된 PL/SQL블록이다. ● 프로시저 작성구문 CREATE [OR REPLACE] PROCEDURE procedure_name (parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, ...) IS/AS PL/SQL Block; - 프로시저 매개변수 모드 사용 매개변수유형 설명 IN (기본값) 호출 환경에서 프로시저로 상수 을 전달한다. OUT 프로시저에서 호출 환경으로 값을 전달한다. IN OUT 동일한 매개변수를 사용하여 호출 환경에서 프로시저로 값을 전달하고 프로시저에서 호출 환경으로 다른 값을 전달받을 수 있다..
● PL/SQL의 블록 구조 - 익명 PL/SQL 블록의 블록 구조 DECLARE (선택사항) 블록안에서 사용될 PL/SQL 객체를 선언한다. BEGIN (필수사항) 실행문을 정의한다. EXCEPTION (선택사항) 오류가 발생할 경우 수행될 작업을 정의한다. END; (필수사항) - PL/SQL 서브 프로그램으 블록 구조 헤더 IS/AS 선언부분 BEGIN 실행부분 EXCEPTION (선택사항) 예외부분 END;
● 예외를 일으키는 두 가지 방법 1. 오라클 에러가 발생하면 관련 예외는 자동적으로 일어난다. 예를 들면, 질의 문장의 데이터베이스에서 읽어 들인 행이 아무것도 없을 때, ORA-01403가 발생하면, 이 때 PL/SQL은 예외 NO_DATA_FOUND를 일으킨다. 2. 블록 내에서 RAISE 문장을 써서 명시적으로 예외를 일으킨다. 예외는 사용자가 정의하거나 미리 정의되어 있다. ● 예외 트랩, 예외 트래핑(trapping) 예외가 블록의 실행 가능한 섹션에서 발생했을 때, 처리는 블록의 예외 섹션에서 해당 예외 처리기로 제어가 넘어가는 것. EXCEPTION WHEN exception1 [OR exception2 ...] THEN statement1; statement2; ... [WHEN exce..
● 매개변수와 커서 커서가 열릴 때 커서로 매개변수 값을 전달하고, 커서가 실행될 때 질의에서 그 값이 사용될 수 있다. DECLARE CURSOR C1 (v_deptno NUMBER, v_job VARCHAR2) IS SELECT empno, ename FROM emp WHERE deptno = v_deptno AND job = v_job; BEGIN OPEN c1(10, 'CLERK'); ... ● FOR UPDATE 절 SELECT ... FROM ... FOR UPDATE [OF column_reference] [NOWAIT] column_reference 수행된 질의에 대응하는 테이블 열 또는 열의 집합이다. NOWAIT 다른 섹션이 행을 잠그면 오라클 에러를 리턴한다. - 커서가 열릴 때 영향..