목록데이터 베이스 (51)
바닥코딩

트리거는 다른 저장 서브프로그램들처럼 고유한 이름을 가지고, 데이터베이스에 저장되며 반복적으로 호출되는 서브프로그램입니다. 하지만 다른 서브프로그램들과는 차이점을 가지고 있는데, 그건바로 트리거는 프로그램에서 직접 호출되어 사용할 수 없습니다. 그렇다면 트리거를 어떻게 실행할까? 에 대한 의문이 생길 수도 있는데, 트리거는 데이터베이스에서 특정 이벤트가 발생할 때마다 데이터베이스에 의해 자동으로 호출됩니다. 예제를 통해 트리거를 생성을 살펴보겠습니다. 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 ..

어떤 언어든 프로그래밍 언어를 접해보셨다면 변수, 상수에 대한 내용을 알고 있을겁니다. 프로그램의 실행을 위해 계산에 사용될 값을 ~~~ 이런 설명에 대해서는 생략하고, 변수와 상수는 PL/SQL에서 어떻게 선언하는지 또 리터럴은 무엇인지에 대해 예제를 통해 알아보겠습니다. 변수 DECLARE v_num number; --변수 선언 begin v_num := 10; -- 변수에 값 넣기 end; 변수는 위와 같이 선언 되고 사용되어집니다. 여기서 주의 해야할점은 = 이 아니라 := 로 작성을 해주어야 10이 대입디 된다는 점입니다 PL/SQL에서 = 대입이 아니라 동등 연산을 의미합니다 상수 DECLARE c_pi CONSTANT NUMBER := 3.14; BEGIN DBMS_OUTPUT.PUT_LIN..

앵커(%)를 사용한 데이터타입 지정 데이터 타입을 지정하는 방법중에서 특이하면서도 유용한 방식이 있는데 변수나 컬럼, 테이블 , 커서 등 기존 선언을 참고하여 데이터 타입을 지정하는 방법이 있습니다. 이를 앵커라고 부르며(오라클에서 공식적으로 사용하는 언어는 아니라고 합니다.) 앵커를 활용하면 선언문이 간결해지는 것과 차후에 참조되는 타입이 변경되더라고 참조하는 쪽은 수정을 하지 않아도 된다는 장점을 가지고 있습니다 %TYPE DECLARE v_ename emp.ename%TYPE; -- 특정 컬럼의 타입이랑 동일하게 생성 v_ename2 v_ename%TYPE; -- 특정 변수의 타입이랑 동일하게 생성 %TYPE BEGIN SELECT ename INTO v_ename FROM EMP WHERE ROW..