# PL/SQL

# SQL 의 장점, 단점
[1] 장점
  - 사용자가 이해하기 쉬운 단어로 구성
  - 쉽게 배울 수 있다.
  - ANSI에 의해 문법이 표준화되어 있다.
[2] 단점
  - 반복처리를 할 수 없다.[loop]
  - 비교처리를 할 수 없다.[if]
  - Error처리를 할 수 없다 [예외처리]
  - sql문을 캡슐화할 수 없다.
  - 변수 선언을 할 수 없다.
  - 실행할 때마다 분석작업후 실행
  - 네트워크 traffic을 유발한다.
  ...이러한 단점을 극복하기 위해 PL/SQL을 사용한다.
    PL/SQL은 sql로 얻을 수 없는 절차적 언어의 기능을 가지고 있다.
 #PL/SQL 사용 이유
  - 반복처리 가능
  - 비교처리 가능
  - 에러처리 가능
  - sql문 캡슐화 가능(데이터 보안 및 무결성)
  - 변수 선언 가능
  - 실행할 때마다 분석된 결과를 실행하기 때문에 성능이 빠르다.
  - 네트워크 트래픽이 감소됨.(여러 sql문을 block으로 묶고
    한번에 블럭 전부를 서버로 전송하기 때문에 통신량을 줄일 수 있다.)
 
  create table staff(
    no number(4),
    name varchar2(20),
    pay number(8),
    joindate date
    );
  create sequence staff_no nocache;--1부터 시작, 1만큼 증가
  --SQL문---------------------------------------
  insert into staff values(staff_no.nextval,'홍길동',2000,sysdate);
  --PL/SQL문-------------------------------------
  --프로시저 생성
  create or replace PROCEDURE staffAdd
  (vname in VARCHAR2, vpay in NUMBER)
  is
  BEGIN
    insert into staff values(staff_no.nextval,vname, vpay, sysdate);
    commit; 
  end;
------------------------------------------------- 
 
  execute staffAdd('임길동',3000);
 
 # PL/SQL 블럭 유형
 1) Anonymous Block(익명 블럭)
 2) Subprogram(Procedure, Function)
 
 1) 익명 블럭
 --구문 형식--------------
    [DECLARE]
    BEGIN
      실행문장;
      실행문장;
    [EXCEPTION] 
    END;
 ------------------------
 - 이름 없는 블럭을 의미.
 2) Subprogram (Procedure, Function)]
   [1] Procedure
   create or procedure 프로시저명
   is
   begin
      실행문장;
      실행문장;...
   [EXCEPTION]
   end;
   [2] Function----------------------
   create or function 함수명
   return datatype
   is
   begin
      실행문장;
      실행문장;...
   return value;
   [exception]
   end;
  -------------------------------------
  서브프로그램은 매개변수를 사용할 수 있고 호출할 수 있는 블럭을 의미.
  어떤 작업을 수행하기 위해 procedure를 사용하고,
  값을 계산하기 위해서는 function을 사용한다.
  [실습1] 익명 블럭
  ----------------------------------------
  set serveroutput on;
  begin
    dbms_output.put_line('Hello World!');
  end;    
  ---------------------------------------
  set serveroutput on;
  declare
        imsg varchar2(100); --변수 선언
  begin
        imsg :='Hello Oracle!'; --변수에 값을 할당
        dbms_output.put_line(imsg);
  end;
  /
  ------------------------------------
  [실습3] 지금 현재시간에서 1시간 전, 3시간 전 시간을 출력해보자.
  declare
  vdate1 timestamp;
  vdate2 timestamp;
  begin
    select systimestamp - 1/24 into vdate1 from dual;
    select systimestamp - 3/24 into vdate2 from dual;
    dbms_output.put_line('한 시간 전: '||vdate1);
    dbms_output.put_line('세 시간 전: '||vdate2);
  end;
  [실습 4] 숫자를 입력받아서 입력받은 숫자가 짝수면 "짝수"를
          홀수면 "홀수"를 출력하자.
--------------------------------------------         
  set verify off;
  variable mymsg varchar2(20)
  accept p_num prompt '숫자를 입력하세요=>';
  -----------------------------------------
  declare
  vnum number := &p_num;
  begin
    if   mod(vnum,2) = 0 then :mymsg := '짝수';
    else  :mymsg := '홀수';
    end if;
  end;
  ---------------------------------------
  print mymsg;
  --------------------------------------
 
 
 
 
 
 
 
 
 

'..열심히 공부하세.. > 오라클' 카테고리의 다른 글

[01] 데이터베이스 개론  (0) 2012.05.08
오라클 기본  (0) 2011.06.21
쿼리문  (0) 2011.03.29
테이블  (0) 2011.03.29
오라클 함수  (0) 2011.03.29

+ Recent posts