반응형 전체 글130 PL/SQL (21) - 예외와 예외처리 예외와 예외처리 1. 사전정의예외 2. 비사전정의예외 3. 사용자정의예외 EXCEPTION WHEN 예외명1 [OR 예외명2...] THEN 처리1; WHEN OTHERS THEN 처리2; 1. 사전정의 예외 DUP_VAL_ON_INDEX INVALID_NUMBER NO_DATA_FOUND PROGRAM_ERROR TOO_MANY_ROWS VALUE_ERROR ZERO_DIVIDE ... 2. 비사전정의 예외 예외명 EXCEPTION; PRAGMA EXCEPTION_INIT(예외명, 에러번호) cons_err EXCEPTION; PRAGMA EXCEPTION_INIT(cons_err, -2292) PRAGMA는 컴파일러 지시어로 EXCEPTION_INIT과 함께 사용하면 특정한 에러.. ■ Data Skill ■/PL-SQL 2023. 3. 18. PL/SQL (20) - 트리거 (Trigger) 트리거란? - 트리거도 Table, View 와 같은 하나의 DB Object 이다. - 조준을 하고 있는 상태에서 이때다 하고 방아쇠를 당기는 순간 총알이 나가게 될 때 그 방아쇠를 트리거로 생각하면 된다. trigger 1 (총포의) 방아쇠 2 (기계의) 제동기[장치], 제륜기(制輪機) 3 (분쟁 등의) 계기, 유인, 자극 4 【전자】 트리거 5 《속어》 =TRIGGERMAN The trigger of a gun is a small lever which you pull to fire it. 트리거의 예를 들면, 데이터베이스 내에서 참조의 무결성을 유지하기 위해 어떤 프로시저를 자동으로 호출하는 것과 같은 행동이다. 트리거는 사용자가 데이터를 삽입하거나 삭제하는 등과 같은, 데이터 변경에 관한 시도.. ■ Data Skill ■/PL-SQL 2023. 3. 18. PL/SQL (19) - Collections (중첩테이블 - Nested Table) 인덱스 테이블과 달리 행이 순서대로 정렬되지 않은 모음이다. 특정 데이터형을 지원하지 않는다. 초기화하려면 constructor 메소드를 사용해야 한다. 인덱스 범위는 -2,147,483,647 ~ 2,147,483,647 이다. 검색할 때 항목은 연속적으로 색인화된다. 중첩테이블 선언 - INDEX BY 절이 사용되지 않는다. 이 절이 있으면 인덱스 테이블, 없으면 중첩 테이블. TYPE 형이름 IS TABLE OF 데이터형 [NOT NULL]; - 항목을 추가하기 전에 생성자를 호출하여 테이블을 초기화 시킨다. - 생성자는 오브젝트에 실제로 메모리를 할당하고, 그 오브젝트와 연결된 데이터 구조체를 초기화시키는 함수를 말한다. - 중첩테이블에서 생성자 함수는 모음을 실제로 생성한 다음, 그것을 선언.. ■ Data Skill ■/PL-SQL 2023. 3. 18. PL/SQL (18) - Collections (VARRAY) VARRAY - 가변 크기 배열은 최대 크기를 고정시킬 수 있다는 것을 제외하면 중첩테이블과 유사하다. - VARRAY 생성시 최대 크기를 설정하기 때문에, 항목을 추가할수록 여유공간이 없어지게 된다. - 크기를 처음에 정해버리기 때문에 한번 추가된 항목은 삭제할 수 없다. - 각각의 배열 요소가 순서대로 유지된다. 생성자 - varray를 사용하기 전에 생성자(Constructor)를 호출하여 초기화 시켜야한다. - 생성자에는 파라미터를 전달할 수 있으며, 이느 배열 요소를 생성하는데 사용된다. - 파라미터를 전달하지 않으면 빈 배열을 생성한다. 배열의 선언과 초기화 TYPE 형이름 IS VARRAY(크기) OF 항목형 [NOT NULL]; - 크기 : 배열이 가질 요소의 개수 - 항목형 : 배열의.. ■ Data Skill ■/PL-SQL 2023. 3. 18. PL/SQL (17) - Collections (Index-by Table) Collection은 여러 오브젝트를 하나로 묶을 수 있게 해준다. 프로그래밍의 배열과 유사하다. 3가지 유형 1. 인덱스 테이블 2. 중첩 테이블 3. 가변 크기 배열 (varray) 1. 인덱스 테이블 (Index-by) 인덱스 테이블이란? - 테이블의 각 요소가 정수값으로 색인되어 있는 테이블. - 테이블의 각 요소는 불연속적으로 저장된다. - 테이블의 최대 크기를 설정하지 못한다. 인덱스 테이블 TYPE 정의 및 변수 선언 - 먼저 TYPE을 선언하고, 이 TYPE의 변수를 선언한다. - TYPE은 스칼라(NUMBER,VCHAR2,...)나 레코드(RECORD)가 될 수 있다. - 테이블의 인덱스에 대한 데이터형은 BINARY_INTEGER 여야 한다. TYPE 형이름 IS TABLE OF 데.. ■ Data Skill ■/PL-SQL 2023. 3. 18. PL/SQL (16) - 오브젝트 타입 (BFILE) 1. BFILE - 오라클 데이터베이스에 저장되는 것이 아니라 외부 운영체제에 저장된 오브젝트에 액세스한다. - 디렉토리 오브젝트와 파일이름이 필요하고 관련 권한이 필요하다. - Commit, Rollback 에 대한 트랜잭션을 지원하지 않는다. - 파일은 읽기전용이다. - too many files open 에러 발생시 init 파일에서 SESSION_MAX_OPEN_FILES 파라미터를 수정한다. - 파일을 열었으면 반드시 닫는다. 2. 디렉토리 오브젝트 - 디렉토리 오브젝트 이름과 경로를 매핑시킨다. - OS상 실제 경로를 지정하는 것이 아니라, 이 디렉토리 오브젝트를 호출하여 액세스한다. 3. DBMS_LOB 패키지 - DBMS_LOB 패키지를 통해 LOB을 조작할 수 있다. ※ BFILE 에.. ■ Data Skill ■/PL-SQL 2023. 3. 18. PL/SQL (15) - 오브젝트 타입 (CLOB, BLOB) 1. LOB - LOB은 TEXT, 그래픽, 이미지, 비디오, 사운드 등 구조화되지 않은 대형 데이터를 저장하는데 사용한다. - 일반적으로 테이블에 저장되는 구조화된 데이터들은 크기가 작지만, 멀티미디어 데이터는 크기가 크다. - 크기가 큰 데이터는 DB에 저장하기 힘들기 때문에 OS상 존재하는 파일을 데이터베이스가 접근하게 된다. - LONG, LONG RAW 데이터 유형은 예전에 사용던 것이고, 현재는 대부분 LOB 데이터 유형을 사용한다. - TO_LOB 함수를 이용하여 LONG 및 LONG RAW 를 LOB 으로 변경할 수 있다. 종류 - CLOB : 문자 대형 객체 (Character). Oracle Server는 CLOB과 VARCHAR2 사이에 암시적 변환을 수행한다. - BLOB : 이.. ■ Data Skill ■/PL-SQL 2023. 3. 17. PL/SQL (14) - 커서 (Cursor) FOR UPDATE FOR UPDATE 절 - 커서 질의에 FOR UPDATE 절을 추가해서 영향을 받는 행을 잠글 수 있다. - FOR UPDATE 절은 SELECT 문 맨 마지막에 온다. (ORDER BY 보다 뒤) - SELECT ... FOR UPDATE문은 갱신 또는 삭제될 행을 식별한 다음 결과 집합에 있는 각 행을 잠근다. - 행의 기존 값을 기반으로 갱신을 수행하려는 경우, 갱신 전에 다른 사용자가 해당 행을 변경하는 것을 방지하는 효과가 있다. - SELECT 문 맨 마지막에 온다. ORDER BY 보다 뒤에... - FOR UPDATE OF column_name 을 사용하여 해당 column_name이 있는 테이블에서만 행을 잠근다. - NOWAIT 절은 다른 세션에서 해당 행을 잠근 경우, 무한정 대.. ■ Data Skill ■/PL-SQL 2023. 3. 17. PL/SQL (13) - 커서 (Cursor) 1. 커서란... - 일반적으로 커서는 모니터에 해당 위치를 알려주고 그곳에 입력을 대기중이라고 깜빡거리는 것을 나타낸다. - 같은 맥락으로 PL/SQL에서 커서는 메모리상에 SQL문이 실행되는 위치를 가리킨다. - 커서를 통해, 메모리에 존재하는 SQL문 실행결과를 바로 접근하여 fetch 할 수 있다. - 이 때 커서는 현재 처리하고 있는 row를 가리키게 된다. - 실행결과를 1개 row씩 처리하다가 마지막까지 처리가 끝나면 커서를 닫는다. - 많은 row를 처리하기 위해 명시적 커서를 선언하고 제어한다. 2. 종류 (1) 암시적커서 (Implicit Cursor) : 모든 DML, PL/SQL Select 문에 대해 선언된다. - 모든 SQL문에는 관련된 개별 커서가 존재한다. - SQL문을 .. ■ Data Skill ■/PL-SQL 2023. 3. 17. PL/SQL (12) - 데이터타입 (%ROWTYPE 과 %TYPE) PL/SQL에서는 일반적으로 BOOLEAN, CHAR, VARCHAR2, DATE, NUMBER 와 같은 데이터 타입을 사용하지만, 추가적으로 특정 TABLE이나 특정 COMLUMN과 같은 형식의 데이터타입을 사용할 수도 있다. - 특정 TABLE의 ROW와 동일한 테이터타입 : table%ROWTYPE - 특정 COLUMN과 동일한 데이터타입 : table.comlumn%TYPE 1. %ROWTYPE - 프로그래밍에서 변수란 데이터를 담는 임시 그릇이다. 데이터타입을 지정한다는 것은 그릇의 크기를 메모리에 지정해주는 작업이다. - 같은 논리로 PL/SQL에서 변수를 선언할 때 변수를 선언하고 데이터타입을 특정 테이블의 1개 ROW와 동일한 크기로 지정해서 그 곳에 값을 저장하는 것이다. C언어의 구.. ■ Data Skill ■/PL-SQL 2023. 3. 17. PL/SQL (11) - 패키지 (Package) 패키지 - 서로 관련된 스키마 오브젝트들을 묶어 캡슐화 한 것. - 컴파일되어 스키마 오브젝트로 데이터딕셔너리에 저장된다. - 비슷한 작업을 수행하는 프로시저, 함수 등을 함께 묶어 사용한다. - 패키지 자체는 호출해도 사용하지 못한다. 내부의 특정 서브 프로그램(프로시저,함수 등)을 호출해야 한다. - "패키지.서브프로그램" 형식으로 호출한다. - 패키지 구성 : 서브 프로그램 명세(Specification) + 서브 프로그램 본문(Body) - 패키지 명세가 바뀌면 그 패키지를 참조하는 모든 스토어드 서브 프로그램을 다시 컴파일해야 한다. - 패키지 본문은 바뀌어도 컴파일이 필요없다. 패키지를 사용하는 이유 - 보다 효율적인 모듈 단위로 구성하여 이해하기 쉽다. - 패키지의 public 변수와 커.. ■ Data Skill ■/PL-SQL 2023. 3. 17. PL/SQL (10) - 프로시저 (Procedure) 프로시저 (Procedure) 와 패키지 (Package) - 프로그램 유지 보수와 실행을 보다 쉽게 하기 위해서 프로그램 코드를 논리적으로 구성한 것. - 1개 패키지 내에 여러개의 프로시저가 존재한다. 스토어드 프로시저 (stored procedure) - 데이터베이스 내에 컴파일되어 저장된 프로시저. - 데이터베이스에 저장된 프로시저는 오브젝트로 관리된다. 프로시저를 사용하는 이유 - 특정 문제나 작업을 해결하기 위해서 사용한다. - 특정 기능을 담당하는 모듈(module) 단위로 되어 있다. - 재사용이 가능하다. - 스토어드 프로시저를 통해서만 데이터를 액세스할 수 있어 보안이 향상된다. - 프로시저는 공유된 메모리 자원을 이용한다. 프로시저와 함수 - 둘은 출력의 형식이 다르다... ■ Data Skill ■/PL-SQL 2023. 3. 17. 이전 1 2 3 4 ··· 11 다음 728x90