저장 서브프로그램 관리 정상적으로 컴파일되어 데이터베이스 서버에 저장된 서브프로그램이라도 관리가 필요하다. 업무 요건이나 환경이 바뀌면 응용 프로그램에도 변경이 필요한 것은 당연한 일이다. 때로는 인터페이스의 변경이나 추가가 필요할 수도 있고, 불필요한 서브프로그램은 삭제할 때도 있을 것이다. 변경과 삭제 저장 서브프로그램의 변경에는 ALTER문을, 삭제에는 DROP문을 사용한다. ALTER문을 사용하여 변경할 수 있는 저장 서브프로그램의 속성에는 여러 가지가 있지만, 대부분 사용할 일은 그리 없고, 그나마 종종 사용하는 것은 소스 코드를 재컴파일하는 것이다. 소스 코드를 재컴파일하는 문장은 다음과 같다. ALTER FUNCTION함수명 COMPILE [ DEBUG ] ; ALTER PROCEDURE프로시저명 COMPILE [..
객체 타입 - 5 슈퍼타입과 서브타입 간의 변환 객체 지향 프로그래밍 언어에서 슈퍼타입의 변수는 서브타입의 인스턴스를 수용할 수 있다. 그리고 슈퍼타입에 할당된 서브타입 인스턴스를 다시 서브타입 변수로 변환하여 서브타입 변수에 할당하는 것도 가능하다. 오라클에서도 동일하게 슈퍼타입 변수 또는 칼럼이 서브타입 인스턴스를 가질 수 있고, 인스턴스의 서브타입과 슈퍼타입 간의 변환이 가능하다. 타입 변환은 다음 두 가지로 분류할 수 있다. 1. 서브타입에서 슈퍼타입으로의 변환: 슈퍼타입은 기본적으로 서브타입 인스턴스를 수용할 수 있다. 변환은 묵시적으로 수행될 수 있으며, 오류가 발생하지 않는다. 2. 슈퍼타입에서 서브타입으로의 변환: 슈퍼타입에 저장된 서브타입 인스턴스를 서브타입으로 변환할 수 있다. 변환에는 함수 TREAT를..
썸네일 객체 타입 - 4 REF 데이터 타입 REF 데이터 타입은 다른 인스턴스에 대한 포인터 또는 참조를 제공한다. REF 타입은 오라클의 내장 타입인데, 내부적으로는 객체 인스턴스의 OID(Object IDentifier)와 다른 몇 가지 정보를 결합한 값을 가진다. REF 타입은 다른 데이터 타입과 마찬가지로 PL/SQL 변수로 선언하여 동일하거나 호환되는 타입의 다른 인스턴스에 대한 참조를 할당받을 수도 있고, SQL문에서는 SELECT와 DML의 대상이 될 수 있으며 WHERE절에도 사용될 수 있다. -- REF 데이터 타입을 사용한 객체 타입 CREATE OR REPLACE TYPE employee_type UNDER person_type ( -- person_type을 상속 empnoNUMBER(4),--사번 sal..
객체 타입- 3 객체 타입의 상속 객체 타입은 상속을 지원한다. 객체 타입의 상속에는 키워드 UNDER를 사용한다. -- person_type을 상속한 employee_type 명세 CREATE OR REPLACE TYPE employee_type UNDER person_type( -- person_type를 상속하여 employee_type 정의 empnoNUMBER(4),--사번 salNUMBER(7,2),--급여 deptnoNUMBER(2),--부서 번호 mgrREF employee_type -- 상급자 로우에 대한 논리적 포인터 ); 상속되기를 바라는 모든 슈퍼타입은 NOT FINAL 키워드를 사용하여 상속이 가능함을 명시해야 한다. 기본은 FINAL인데, NOT FINAL을 명시하지 않은 객체 타입은 상속될 수..
Object Type(객체 타입) - 2 정적 메소드 정적 메소드는 키워드 STATIC FUNCTION 또는 STATIC PROCEDURE를 사용하여 선언되는 서브프로그램이다. 정적 메소드는 객체 타입 자체에 대해 실행되며, 특정 인스턴스와는 무관하다. 따라서 정적 메소드는 SELF 매개변수를 가지지 않는다. -- 정적 메소드 명세 CREATE OR REPLACE TYPE person_type AS OBJECT ( family_nameVARCHAR2(30),-- 성 given_nameVARCHAR2(30),-- 이름 address_1VARCHAR2(30),-- 기본 주소 address_2VARCHAR2(30),-- 상세 주소 MEMBERFUNCTION full_nameRETURN VARCHAR2,-- 풀 네임 반환 메소드 STATICFUNCTI..
Object Type(객체 타입) - 1 오라클의 객체 지향 프로그래밍 기술의 핵심은 객체 타입(Object Type)이다. 객체 타입을 이해하기 위해서는 객체 지향 프로그래밍에 대한 조금의 사전 지식이 필요하다. 하지만 그에 대한 설명은 이 post에서 하기엔 이 포스트의 목적에 어긋나므로 googling으로 조금 알아보기를 권한다. 객체 타입 개념 오라클에서의 객체는 간단히 말해 속성과 메소드가 결합된 데이터베이스 객체이다. 객체 지향 언어의 클래스를 데이터베이스에 적용시킨 것이 객체 타입이라고 보면 거의 틀리지 않다. 객체를 이해하기 위해서는 객체타입과 인스턴스에 대한 구분이 필요하다. 객체 타입 인스턴스 객체의 속성과 행위에 대한 정의. 이는 객체 지향 언어의 클래스와 유사한 개념이다. 객체 타입은 생성될 인스턴스에 대한 탬플릿이며, 객..
Trigger(트리거) 트리거는 다른 저장 서브프로그램들처럼 고유한 이름을 가지고, 데이터베이스에 저장되며 반복적으로 호출되는 서브프로그램이다. 하지만 다른 저장 서브프로그램과는 달리 트리거는 프로그램에서 직접 호출되어 실행될 수 없다. 트리거는 데이터베이스에 특정 이벤트가 발생할 때마다 데이터베이스에 의해 자동으로 실행된다. CREATE OR REPLACE TRIGGER tr_emp_ins_upd_validate BEFORE INSERT OR UPDATE OF sal, comm ON emp REFERENCING OLD AS OLD NEW OR NEW FOR EACH ROW BEGIN IF INSERTING THEN IF :NEW.sal < 0 THEN DBMS_OUTPUT.PUT_LINE('급여가 음수입니다.'); :NEW...
서브프로그램의 다양한 기능들 - 매개변수 서브프로그램에 대한 설명이므로 저장 서브프로그램과 저장되지 않는 서브프로그램 모두에 해당하는 내용이다. 매개 변수 함수나 프로시저와 같은 서브프로그램에는 매개변수를 사용할 수 있다. 매개변수가 없다면 서브프로그램이 있으나 마나 할 정도로 기능이 매우 제한적일 수밖에 없을 것이다. 매개변수는 서브프로그램에 전달되는 입력 값 또는 출력 값이다. 보통 서브프로그램은 매개변수를 전달받아 이 값에 따라 처리할 대상 데이터와 처리 방식을 결정하고 처리를 수행한다. 매개변수의 선언과 사용 서브프로그램 메개변수는 서브프로그램명 뒤에 ( 와 ) 로 둘러싸여 선언되며, 서브프로그램 실행 시에 서브프로그램의 내부로 전달되어 사용된다. 서브프로그램에 매개변수를 사용하려면 먼저 서브프로그램 명세에 매개변수를 선언해야 한다. 명..
Package(패키지) - 2 패키지 서브프로그램 패키지 서브프로그램은 패키지 내부에 선언된 함수와 프로시저를 말한다. 패키지 변수와 마찬가지로 패키지 서브프로그램은 공용과 전용으로 구분된다. 차이점 공용 서브프로그램 전용 서브프로그램 선언 위치 패키지 명세 패키지 본체 패키지 외부 PL/SQL에서 참조 가능 불가능 패키지 외부 SQL에서 참조 프로시저: 불가능 함수: 가능 불가능 패키지 내부 서브프로그램에서 참조 가능 가능 주 사용자 외부 프로그램 공용 또는 전용 서브프로그램 -- 패키지 서브프로그램은 다른 PL/SQL 프로그램에서 참조 가능 DECLARE v_var NUMBER; BEGIN v_var := pkg_emp.get_wage(7788); DBMS_OUTPUT_PUT_LINE('last wage = '||pkg_emp.v..
Package(패키지) - 1 PL/SQL 저장 패키지(Stored Package)는 다양한 PL/SQL 요소들을 묶어 모듈화하여 하나의 프로그램 레벨로 제공할 수 있게 한다. 저장 함수나 저장 프로시저와 마찬가지로 패키지도 고유한 이름을 가지고 데이터베이스에 저장되며, 이름을 식별자로 사용하여 반복적으로 재사용될 수 있다. 패키지는 내부에 타입, 상수, 변수, 커서. 예외, 서브프로그램(함수와 프로시저) 등 PL/SQL에서 지원하는 대부분의 요소들을 포함할 수 있으며 패키지의 사용자가 이들을 참조할 수 있도록 한다. 패키지는 상속과 기본 생성자를 사용할 수 없어서 완전한 객체 지향 프로그래밍을 지원하지는 않는다. 완전한 객체 지향 프로그래밍은 객체 타입에서 지원한다. 패키지 구조 패키지는 패키지 명세(Specification)와 패..
저장 프로시저 PL/SQL 저장 프로시저는 반환되는 값 없이 특정 처리만을 수행하는 서브프로그램이다. 저장함수와 마찬가지로 저장 프로시저도 고유한 이름을 가지고 데이터베이스에 저장되며 이름을 식별자로 사용하여 반복적으로 재사용될 수 있다. 저장 프로시저는 입력값으로 매개변수를 가질 수 있다. 저장 프로시저는 배치 프로그램이나 오라클 스케줄러와 같이 데이터를 처리하는 프로그램에 유용하게 사용된다. PL/SQL 저장 프로시저를 생성하는 기본 구조는 이러하다. CREATE [ OR REPLACE ] PROCEDURE 프로시저명 [ ( 매개변수목록 ) ] IS-- IS 대신 AS를 사용해도 됨 선언부 BEGIN 실행부 EXCEPTION 예외처리부 END; 앞의 함수 작성 형태와 비교해서 차이점을 꼽자면 함수는 반환되는 값의 ..
Stored Function(저장 함수) PL/SQL 저장함수는 RETURN문을 사용하여 하나의 값을 반환하는 서브프로그램으로 고유한 이름을 가지고 데이터베이스에 저장되며 이름을 식별자로 사용하여 반복적으로 재사용될 수 있다. 저장함수는 입력 값으로 매개변수를 가질 수 있으며 일반적으로 서로 다른 입력 값에 따라서 서로 다른 결과값을 반환한다.(But 입력값이 다르다고 결과가 항상 달라야 하는 것은 아니며 입력값이 돌일하다고 항상 결과가 동일해야 하는 것도 아니다.) 함수의 기본구조 CREATE [ OR REPLACE ] FUNCTION 함수명 [ ( 매개변수목록 ) ] RETURN 반환데이터타입 IS-- IS 대신 AS를 사용해도 동일 선언부 BEGIN 실행부 RETURN 반환값 EXCEPTION 예외처리부 END; CREATE는 실제로는 저..