LeReve 2013. 5. 13. 18:06

<PL/SQL>
- SQL에 절차적인 프로그래밍 요소(조건문,반복문)를 가미해 만든 것.
- 오라클에서만 사용가능.

형식)
  DECLARE --선언부
     -- 변수선언(실행부에서 사용하고자 하는)을 각각
  BEGIN     --실행부
     -- 변수 초기화
     -- 절차적인 요소
     -- 실행할 DQL,DML
     -- 기능(프로시져, 함수) 호출
  END;
  /

※ 실행부에서의 select 사용

  select a,b into 변수명1,변수명2
  from test;
 

 declare
  vempno number(4);
  vename varchar2(15);
 begin
  vempno := 8000;
  vename := '홍길동';
  dbms_output.put_line('사원번호: '||vempno);
  dbms_output.put_line('사원명: '||vename);
 end;
 /


<조건문>
1. IF~THEN~END IF
  형식)
     IF 조건식
       THEN 실행할문장1
               실행할문장2
     END IF;
     
2. IF~THEN~ELSE~END IF
   형식)
     if 조건식
       then 조건결과 참일때 실행할 문장
     else
       조건결과 거짓일때 실행할 문장
     end if;

    

3. IF~THEN~ELSIF~ELSE~END IF

    형식)
        if 조건식1
          then 조건식1 참일때 실행할 문장
        elsif 조건식2
          then 조건식2 참일때 실행할 문장         
        elsif 조건식3
          then 조건식3 참일때 실행할 문장
        else 조건1,2,3에 거짓일때 실행할문장         
        end if;    
                       
<반복문>
1. loop
 형식)
  loop
   반복실행할 문장1;
   반복실행할 문장2;
   exit where 조건식;
  end loop;
   
2. for
 형식)
  for 인덱스변수
   in [reverse] 최소값..최대값
  loop
   반복실행될 문장;
  end loop;

 


3. while
 형식)
  while 조건식
  loop
   반복 실행할 문장;
  end loop;

<저장프로시저> stored procedure
 - 자주사용하는 SQL문을 모듈화하여 필요할 때마다 호출하여 사용.
 형식)
  create [or replace] procedure 프로시저명[(변수명 [mode] 자료형)]
  is
   변수선언;
  begin
   SQL문장;
  end;
  /
  

사용법)
  execute 프로시저명;
 
SQL> @폴더명/파일이름

SQL> execute 프로시저명

 

<바인드 변수>
variable a varchar2(15);
execute select_empno(7788, :vename,:vsal,:vjob);

print vename;

 

VENAME
--------------------------------
SCOTT

 

<저장함수> sotred function
 형식)
  create or replace function 함수명 (변수명 [mode] 자료형)
  return 자료형;
  is
  begin
   실행할 SQL문;
   return 데이터;
  end;
  /

 

 -- fun_test.sql

SQL> @0507/fun_test.sql

함수가 생성되었습니다.

SQL> variable su number;
SQL> execute :su := cal_bonus(7788);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> print su

        SU
----------
    600000

 

<커서> Cursor
- 두 개 이상의 결과행(select)을 처리할 때 사용
 형식)
  DECLARE
   CURSOR 커서명 IS select문;
  BEGIN
   OPEN 커서명;
   FETCH 커서명 INTO QUSTN;
   CLOSE 커서명;
  END;
  
<입력 트리거>
- 입고테이블에 입력시 상품테이블에 재고를 수정

create or replace trigger insert_tri
 after insert--발생이벤트
 on 입고--이벤트발생(insert,delete,update)할 테이블
 for each row -- 각각 행에 이벤트를 적용

 

--<바인드bind변수>
-- :old 기존데이터
-- :new 새로입력된데이터


<삭제트리거>
create or replace trigger delete_tri
 --이벤트
 after delete
 --적용테이블
 on 입고
 for each row --여러행 적용
 
<수정트리거>

create or replace trigger update_tri
 --이벤트
 after update
 --적용테이블
 on 입고
 for each row --여러행 적용