본문 바로가기

IT/Oracle

오라클 프로시저

문제1)

사원번호를 입력받아 급여를 10% 인상하는 프로시져 작성

IN : 사원번호

UPDATE 사용

프로시저 명 : IPDATE_SAL

;

1. PS/SQL 편집기 버튼 클릭

2. 실행 클릭(컴파일)


CREATE OR REPLACE PROCEDURE UPDATE_SAL -> 프로시저 생성 UPDATE_SAL이름

(V_EMPNO IN number) -> v_empno 변수, IN 입력변수, NUMBER 데이터타입

IS -> 반드시 기재 필요, 예약어

BEGIN -> 반드시 기재 필요, 예약어

UPDATE EMP

   SET sal = sal * 1.1

 WHERE EMPNO = V_EMPNO; ->처리문

COMMIT; 실행완료

END UPDATE_SAL; ->반드시 기재 필요, 종류부분, 주의 대소문자 구분


BEGIN 부터 END 실행문


;;

SELECT * FROM EMP;


EXEC UPDATE_SAL(7369);


UPDATE EMP

SET SAL = 800

 WHERE EMPNO = 7369;

 

 

프로시저 문법

 CREATE OR REPLACE 프로시저 이름

(

IN argument

      OUT argument

      IN OUT argument

)

IS

[변수 선언] -> 프로시저 안에서 사용되는 변수 선언


BEGIN -> 필수

[PL/SQL BLOCK]

- SQL 문장, PL/SQL 제어 문장

[EXCEPTION] -> 선택

- ERROR 발생시 수행하는 문장


1. CREATE OR REPLACE 구문을 사용하여 생성

2. IS 로 PL/SQL의블록을 시작한다.

3. IS ~ BEGIN 사이에 LOCAL 변수 선언


[데이터 타입 정리]

1.일반변수 선언 문법

  변수명 [CONSTRAINT] 데이터타입 [NOT NULL] [:= 상수값이나 표현식];

-변수의 이름은 SQL의 오브젝트명과 동일한 규칙을 따른다

-상수처리하고자 할 경우 CONSTRAINT

-NOT NULL이 정의되어 있으면, 초기값을 반드시 지정해야 합니다.

 정의되어 있지 않을때는 생략 가능합니다.

-초기값 할당은 연산자 := 를 사용합니다.

-초기값을 지정하지 않으면, 변수값은 NULL값을 가지게 됩니다.]

-일반적으로 한줄에 한개의 변수를 선언합니다.


예) AAAA = 10 -> 일반 프로그램에서의 대입방식

   AAAA := 10 -> 프로시저에서의 대입방식

선언예제)

--숫자형 상수 선언

      v_price CONSTRAINT NUMBER(6) := 1500;

      --문자 변수 선언

      v_name VARCHAR2(20);

      --날짜형 변수 선언

      v_birthday DATE;


2. %TYPE 데이터형

-- 현재 EMP 테이블 컬럼들의 데이터 타입

EMPNO NUMBER(4) ->    v_empno NUMBER(4)  -> v_empno emp.empno%TYPE

ENAME VARCHAR2(10 BYTE) -> v_ename VARCHAR2(10)->v_empno emp.name%TYPE

JOB VARCHAR2(9 BYTE) -> v_job VARCHAR2(9)

MGR NUMBER(4) -> v_mgr NUMBER(4)


NUMBER(

NUMBER

NUMBER



문제2) 사원번호를 입력받아 사원번호, 사원이름, 급여를 출력하는

프로시저를 작성하시오

source)

CREATE OR REPLACE EMP_INFO

      ( p_empno IN emp.empno%TYPE)

      

      IS

      --출력값 저장할 변수 선언

      v_emp emp.empno%TYPE

      v_name emp.name%TYPE

      v_sal emp.sal%TYPE

      

      BEGIN

      SELECT EMPNO, ENAME, SAL

      INTO v_empno, v_ename, v_sal

      FROM EMP

       WHERE EMPNO = p_empno;  

       DBMS_OUTPUT.PUT_LINE('사원번호 : ' || v_empno);

       DBMS_OUTPUT.PUT_LINE('사원이름 : ' || v_ename);

       DBMS_OUTPUT.PUT_LINE('급   여 : ' || v_sal);

       

       END;

       /

       

       

SQL> SET SERVEROUTPUT ON;    -> 화면에 출력하기 위한 설정

SQL> EXECUTE EMP_INFO(7969); -> 프로시저 실행



SET SERVEROUTPUT ON;


EXEC EMP_INFO(7369);


CREATE OR REPLACE PROCEDURE EMP_INFO

      ( p_empno IN emp.empno%TYPE)

      

      IS

      

      v_empno emp.empno%TYPE;

      v_ename emp.ename%TYPE;

      v_sal emp.sal%TYPE;

      

      BEGIN

      SELECT EMPNO, ENAME, SAL

      INTO v_empno, v_ename, v_sal

      FROM EMP

       WHERE EMPNO = p_empno;  

       DBMS_OUTPUT.PUT_LINE('사원번호 : ' || v_empno);

       DBMS_OUTPUT.PUT_LINE('사원이름 : ' || v_ename);

       DBMS_OUTPUT.PUT_LINE('급   여 : ' || v_sal);

       

       END;

       /



CREATE OR REPLACE PROCEDURE UPDATE_SAL

(v_empno IN NUMBER)

IS

BEGIN

UPDATE EMP

SET SAL = SAL * 1.1

 WHERE EMPNO = v_empno;

 

 COMMIT;

 END UPDATE_SAL;

 /

'IT > Oracle' 카테고리의 다른 글

오라클 문법  (0) 2015.07.29
oracle 프로시저, 함수, 패키지  (0) 2015.07.28
오라클 10탄 [ INDEX ]  (0) 2015.07.25
오라클 9탄 (sequence,view)  (0) 2015.07.24
오라클 8탄 [데이터 조작어 DML]  (0) 2015.07.23