문제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 |