목록pl/sql (9)
Devvy-Is-Free
레코드 레코드: 복수의 값을 저장할 수 있는 변수 레코드 종류 %ROWTYPE 레코드 %ROWTYPE 속성으로 선언된 변수 사용자 정의 레코드 사용자 정의의 레코드 타입으로 선언된 변수 사용자 정의 레코드 정의 사용자가 타입을 정의할 때, 필드 개수와 필드명과 데이터 타입 정의 ㄴ 정의한 타입과 변수명 매핑 - 사용자 정의 레코드는 NUMBER 타입이나 %ROWTYPE 속성의 변수와는 달리 타입 정의와 변수 정의의 두 단계 필요 - 레코드 타입 정의 사용자 고유의 레코드 타입 정의 * 필드의 데이터 타입에 %TYPE, %ROWTYPE 속성 사용 가능 * 필드에 NOT NULL 제약 조건 지정 간으 * 필드에 디폴트 값을 지정하여 초기화 가능 TYPE IS RECORD ( [NOT NULL { := | D..
트리거 어떠한 이벤트를 Trigger로 하여 자동으로 기동되는 프로시저 EX) 어떠한 테이블에 UPDATE문이 실행되면 트리거(INSERT문)가 기동되어 로그 테이블에 기록됨 트리거의 사용 목적 - 복잡한 보안 요건 구현 EX) 중요한 테이블에 대해 특정 데이터로 변경할 수 없거나 특정 컬럼은 변경을 허용하지 않음 등의 처리 실행 가능 - 높은 수준의 감사 테이블에 수행된 변경 내용을 기록하기 위해 트리거 사용 데이터베이스 처리나 특정 사용자에 대한 처리가 수행된 경우에 기동하는 트리거를 작성하면, 어떤 사용자가 어떤 일을 했는지 기록 가능 - 복잡한 규칙 설정 사용자가 규칙을 정의할 때는 보통 CHECK 제약 등의 무결성 제약 조건을 사용하지만, 트리거를 사용하면 '급여액을 30% 이상 감액하는 업데이..
패키지 패키지 : 복수의 서브 프로그램들을 하나로 통합(패키지화)하는 오브젝트 통합 관리하면 오브젝트 간 의존성 관리 등을 간단히 처리할 수 있음 패키지는 Oracle에 저장되는 오브젝트이므로 이름을 정의해야 하고 프로시저나 함수와는 달리 정의부(.plh)와 본체(.plb)를 별도로 작성해야 함 정의부 : 본체에 포함된 프로그램명 등 기술 패키지의 장점 - 애플리케이션 설계의 용이성(의존성 관리 용이) 정의부에는 본체의 서브 프로그램을 실행하는 데 필요한 정보를 기술 ㄴ 정의부만 정의되어 있으면 패키지 내의 오브젝트를 실행하는 프로그램은 패키지 본체가 미완성이라 하더라도 정상적으로 컴파일 패키지화하면 패키지 본체는 실행 쪽의 프로그램에서 직접 참조하지 않음 ㄴ 패키지 본체의 정의를 변경해도 실행 측의 프..
프로시저 프로시저 : 특정 처리 작업을 실행하기 위한 Stored 서브 프로그램 - 정의부 : 호출에 필요한 모든 정보 작성 - 본체 : 처리 내용 작성 CREATE [OR REPLACE] PROCEDURE -- 정의부 {IS | AS} -- 본체 BEGIN [EXCEPTION ] END []; 정의부 항목 개요 프로시저명 PROCEDURE 키워드 뒤에 원하는 이름을 지정 OR REPLACE 옵션(생략 가능) 동일한 이름의 프로시저가 이미 생성된 경우, 덮어쓰기(Overwrite)로 생성 본체 - 선언부, 실행부, 예외처리부 - 선언부는 DECLARE 대신 IS 또는 AS 로 시작 - 선언부가 필요하지 않더라도 IS나 AS는 생략 불가 - END절 뒤에 프로시저명 지정(필수는 아니지만 명시적으로이름 표시..
Stored 서브 프로그램의 장점 - 공유 사용에 의한 생산성 향상 - 성능 향상 : 컴파일된 상태로 데이터베이스에 저장되어 실행할 때마다 컴파일할 필요가 없어 성능 향상 - 메모리 영역 절약 : 프로그램이 메모리에 올라가 상주하여 다른 애플리케이션에서도 공유하여 사용되어 실행할 때마다 새로운 메모리 영역을 획득할 필요가 없어짐 - 네트워크 전송량 감소 : PL/SQL 블록을 전송하는 경우에 비해 데이터 전송량이 줄어듦 Stored 서브 프로그램 작성 - Stored 프로시저( Procedure ) - Stored 함수 ( Function ) -- DBMS_OUTPUT을 실행하는 PL/SQL 블록을 Stored 프로시저로 작성 CREATE PROCEDURE out_put -- 프로그램 실행이 아닌 생성 ..
예외가 발생했을 때 PL/SQL 블록에 실행부밖에 없다면, PL/SQL은 비정상 종료(OS 측에 제어가 돌아감)됨. DECLARE e_empno NUMBER; BEGIN SELECT empno INTO e_empno FROM emp; END; / DECLARE * 1행에 오류: -- SELECT INTO문이 복수의 행을 리턴했기 때문에 오류 발생 DECLARE e_empno NUMBER; BEGIN SELECT empno INTO e_empno FROM emp; EXCEPTION -- 예외 처리부 WHEN others THEN DBMS_OUTPUT.PUT_LINE('예외 발생!'); END; / 예외 발생! PL/SQL 처리가 정상적으로 완료되었습니다. PL/SQL은 실행부에서 예외가 발생하면 즉시 예외..
조회한 데이터를 변수에 할당해서 사용하기 위해 SELECT INTO문 / 커서(Cursor) 두 가지 방법이 있음 SELECT INTO 문 - 조회 데이터가 한 행뿐인 경우에 사용 SELECT [, ...] INTO [, ...] FROM ; - 조회 결과는 한 행으로 한다. 조회 결과가 복수 행인 경우 -> TOO_MANY_ROWS 오류 발생 조회 결과가 아예 없는 경우에는 NO_DATA_FOUND 오류 발생 - 컬럼과 변수를 대응시킨다. 여러 컬럼을 지정하는 경우에는 컬럼과 같은 수의 변수가 필요하고 해당 컬럼과 변수의 데이터 타입은 동일해야 함 DECLARE e_ename emp.ename%TYPE; e_hiredate emp.hiredate%TYPE; BEGIN SELECT ename, hired..
조건 제어 - IF문 DECLARE var NUMBER := 10; BEGIN IF var = 10 THEN DBMS_OUTPUT.PUT_LINE('값은 10'); ELSE DBMS_OUTPUT.PUT_LINE('값은 10이 아님'); END IF; END; / -- ----------------------------------------------- 값은 10이다 PL/SQL 처리가 정상적으로 완료되었습니다. IF문 종류 개요 IF - THEN 조건을 만족하는 경우 특정 처리 작업을 수행 IF - THEN - ELSE 조건을 만족하는 경우와 만족하지 않는 경우에 따라 다른 처리 작업을 수행 IF - THEN - ELSEIF 복수의 조건을 지정하고 각 조건에 대해 특정 처리 작업을 수행 IF - THEN..
PL/SQL 특징 - 전차 처리 실행이 가능하기 때문에 SQL 단문으로는 하기 어려운 복잡한 처리 실행 가능 - Oracle에서 사용하는 모든 SQL 데이터 유형을 지원하기 때문에 데이터 타입 변환이 불필요해 Oracle과의 친화력이 좋음 - Windows나 Linux 등 OS가 다른 경우라도 Oracle이 동작하는 모든 환경에서 그대로 사용 가능 - 다른 언어로 SQL을 실행하는 경우, Middleware를 통해 Oracle에 SQL을 문장 단위로 전송하여 많은 SQL을 발행하는 프로그램은 프로세스 간 통신과 네트워크에 걸리는 부하가 크지만, PL/SQL은 블록 내에 작성된 SQL을 포함한 프로그램 단위로 Oracle에 일괄 전송하여 처리하기 때문에 프로세스 간 통신과 네트워크 트래픽 감소호 송수신에 ..