목록데이터 베이스/오라클 PLSQL (12)
바닥코딩
오라클 PL/SQL 에는 저장 패키지(Stored Package) 라는 개념이 존재합니다. 패키지라는 뜻과 같이 저장 패키지는 다양한 PL/SQL의 요소들을 묶어 하나의 프로그램 레벨로 제공할 수 있게 합니다. 패키지의 고유한 특성은 다음과 같습니다. 고유한 이름을 가진다 이름을 식별자로 사용하여 반복적으로 재사용이 가능합니다 패키지 내부는 타입, 상수, 변수, 커서 , 예외, 서브프로그램(함수,프로시저)등 대부분의 요소들을 포함할 수 있습니다 객체지향언어의 클래스와 유사한 기능을 가집니다. 정보 은닉의 기능이 강화됩니다 이해해기 쉽고 가독성이 뛰어납니다 신뢰성이 있으며 재사용성이 높은 프로그램을 만들 때 유용합니다. 패키지 명세 패키지는 명세와 본체로 나누어져 있습니다. 명세는 패키지 사용자에게 공개되..
앞선 포스트에서 트리거를 제외한 대부분의 소스는 서버에 저장되지 않는 프로그램들이였습니다. 저장되지 않은 프로그램들은 일회적으로 한번만 수행이 되며, 저장이 되지 않았기 떄문에 다른 사용자와 프로그램을 공유하거나 재사용할 수가 없습니다. 반면 저장 서브프로그램은 데이터베이스 서버에 저장 되며 다른 사용자에 의해 중복 호출하여 사용할 수 있기 때문에 동일 사용자 소스코드를 사용자가 여러번 사용하거나 공유 할수 있습니다. 저장 서브프로그램을 사용하는 이유 재사용성 : 한번 작성되어 서버에 저장하면 소스코드를 재 호출하여 사용할 수 있기 떄문에 생산성을 증대한다. 유지보수성 : 이런 프로그램의 작성은 중앙 서버에서만 이루어 지기 때문에 유지보수가 용이해진다 모듈화 : 덩치 큰 프로그램을 통제 가능한 모듈로 분..
트리거는 다른 저장 서브프로그램들처럼 고유한 이름을 가지고, 데이터베이스에 저장되며 반복적으로 호출되는 서브프로그램입니다. 하지만 다른 서브프로그램들과는 차이점을 가지고 있는데, 그건바로 트리거는 프로그램에서 직접 호출되어 사용할 수 없습니다. 그렇다면 트리거를 어떻게 실행할까? 에 대한 의문이 생길 수도 있는데, 트리거는 데이터베이스에서 특정 이벤트가 발생할 때마다 데이터베이스에 의해 자동으로 호출됩니다. 예제를 통해 트리거를 생성을 살펴보겠습니다. create or replace trigger tr_emp_ins_upd_validate before insert or update of sal, comm on emp -- 발생시점 referencing old as old new as new -- 참조절 ..
컬랙션은 내부 구성 항목이 모두 동일한 데이터 타입을 가진 유형의 자료 구조입니다 일반적인 프로그래밍 언어를 학습해 보신분들은 알고 있는 개념일테지만 대표적으로 배열과 같은 구조 등이 컬렉션에 해당합니다. 컬렉션의 각 항복은 변수명(인덱스) 와 같은 표현식을 사용하여 접근이 가능합니다 컬렉션 타입의 종류 오라클 PL/SQL에서 지원하는 컬렉션 타입에는 Associative Array(연관 배열), VARRAY(가변 크기 배열), Nested Table (중첩 테이블) 등이 이에 해당합니다 비교항목 / 컬렉션타입 Associative Array VARRAY Nested Table 컬렉션 항목의 개수 미지정 지정 미지정 인덱스 유형 문자열 또는 정수 정수 정수 초기화되지 않은 상태 Empty null nul..
커서는 DB서버에 저장되어 있는 특정 쿼리를 실행하기 위한 정보를 저장하는 PGA 에 대한 포인터로, 클라이언트 메모리에 존재하는 자료구조 입니다. 지금까지 짧게나마 pl/sql 문법과 얘재들을 살펴보면서 커서라는 개념을 접한적은 없었습니다. 그런데 과연 꼭 커서를 알거나 사용할 필요가 있나 의문이 들 수 있습니다. 결론적으로 말하자면 PL/SQL은 커서 없이는 쿼리를 실행할 수 없습니다. 지금까지 했던 예제들은 따로 커서를 명시해 주지는 않았지만, 묵시적으로 커서가 사용된 것이며 물론 명시적으로도 커서를 사용할 수 있습니다. 묵시적 커서, 명시적 커서 비교항목 묵시적 커서 명시적 커서 커서 선언 없음 있음 복잡도 단순 복잡 커서 제어 불가능 가능 유연성 낮음 높음 사용가능 SQL SELECT, INSE..
순환문은 일정한 범위의 소스 코드 문장을 반복적으로 수행하는 기능을 제공합니다. 당연히 순환문에서는 무한루프를 방지하기 위해 탈출문이 존재하며 순환문은 LOOP, WHILE, FOR등을 제공합니다. LOOP BEGIN LOOP --충족조건이 없는 무한 루프 NULLL; end loop; end; LOOP 문의 일반적인 구조는 위와 같습니다 위와 같은 조건일 경우 LOOP 안쪽에 문장을 반복하게 되는데 따로 조건이 없기 떄문에 직접 실행을 해본다면 무한루프에 빠지는것을 확인 할 수 있습니다. 이러한 LOOP 문의 탈출 조건을 지정하기 위하여 탈출문이 존재합니다 EXIT WHEN declare is v_num number :=1; begin loop DBMS_OUTPUT.PUT_LINE('v_num =' |..
PL/SQL 은 논리 조건에 따라서 다른 문장을 실행 할 수 있도록 조건 분기문을 제공합니다. 조건분기문은 IF문과 CASE문 두가지를 제공합니다 IF 조건문 IF 조건문은 타 프로그래밍 언어의 IF와 유사합니다. 일단 예제를 통해 알아보겠습니다. create or replace procedure Iftest_proc is v_cnt number; v_type STRING(10); begin select count(*) into v_cnt from USER_TABLES where TABLE_NAME ='EMP'; if v_cnt > 0 then DBMS_OUTPUT.PUT_LINE('테이블 emp 가 존재 합니다'); elsif dbms_output.PUT_LINE('테이블 emp가 존재 하지 않습니다'..
PL/SQL의 궁극적인 목표는 SQL의 한계를 극복하는 것이지만 가장 중요한 것은 SQL을 실행시키는 기능이 가장 중요합니다. 결국 SQL을 보조하기 위해 만들어진 언어기 떄문에 PL/SQL에 내 SQL 처리 기능을 매우 강력하고, 기본 SQL을 수행할 수 있어야 올바른 활용이라 할 수 있습니다. SQL에서 가장 많이 쓰이는 SELECT, INSERT , UPDATE, DELETE 문 등을 통해 알아보겠습니다. SELECT create or replace procedure fn_SalRate is v_ename emp.ENAME%type; - --EMP 테이블의 타입 복사 v_empno emp.EMPNO%type; v_rate number := 1.1; v_sal number; begin v_empno ..