PROCEDURE : 미리 정리된 로직에 따라 필요한 명령을 절차적으로 실행하는 서브프로그램

                     리턴값을 가질 수도 있음.

 

FUNCTION    : 미리 정리된 로직에 따라 필요한 명령을 절차적으로 실행하는 서브프로그램

                     리턴값이 반드시 있어야한다.

 

PACKAGE    : 서브 프로그램의 묶음.

 

TRIGGER     :  특정 이벤트 발생 자동으로 수행되는 PL/SQL 블록

 

# 치환 변수

BEGIN

  UPDATE EMP

  SET SAL  = 4000

  WHERE DEPTNO = &ID;

END ;

/

Enter value for id: 50

old     4:   WHERE DEPTNO = &ID;

new   4:   WHERE DEPTNO = 50;

PL/SQL procedure successfully completed.

 

 

Elapsed: 00:00:01.25

 

& 치환 변수는 SQLplus/ SQLdeveloper 에서만 사용되는 변수. (SQLplus차원에서 바꾼다.)

SQLplus차원에서 바뀌어 서버에 전달된다.

BEGIN

  UPDATE EMP

  SET SAL  = 4000

  WHERE DEPTNO = 50;

END ;

/

이렇게 전달된다.

 

- 프로시져 생성.

CREATE PROCEDURE UPDATE_EMP                          --SPEC(PL/SQL 헤더) 시작

( P_SAL        NUMBER,   --파라미터

 P_DEPTNO      NUMBER)                                             --SPEC 

AS                                                                                       --BODY 시작

 V_EMP              NUMBER ;           --로컬변수

BEGIN

  UPDATE EMP

  SET SAL  = P_SAL

  WHERE DEPTNO = P_DEPTNO;

END ;

/                                                                                            --Body

 

- 프로시져 수정 OR REPLACE 써서 덮어쓸 있다.

 

- 프로시져 수행시 파라미터값을 넣어서 쓰면된다.

EXECUTE UPDATE_EMP(5000,50);

 

-프로시져 구조를 보기 위해선 DESC UPDATE_EMP;

 

# 이름지정방식

 

CREATE OR REPLACE PROCEDURE raise_salary

( p_id IN employees.eployee_id%TYPE DEFAULT 100

 p_percent IN NUMBER := 10)

~~~~~~~~

 

EXECUTE RAISE_SALARY (101,20) : 위치 지정 방식

기본값을 쓴다고 하더라도 앞에있는 파라미터부터 값을 주어야한다.

EXECUTE RAISE_SALARY (P_PERCENT =>20) :  이름 지정 방식

 

 

CREATE PROCEDURE P1

(

 P1     NUMBER :=1

 P2     NUMBER :=2

 P3     NUMBER :=3

 P4     NUMBER :=4)

IS

~~~~~~~~~~~~~~~~~~~~~~~

 

EXECUTE P1(100,200,300,400)

EXECUTE P1( 1,2,300)         --위치 지정방식

EXECUTE P1 (P=>300)            --이름 지정방식

EXECUTE P1 (100, P4=>500)  --혼합지정방식

EXECUTE P1( P4=>500, 100)  → ERROR

혼합 지정방식을 이용하면 이름지정방식이 먼저 나올경우 뒤는 계속 이름 지정방식을 써야한다.