# 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 |