[ORACLE] Stored Procedure
Posted 2008/04/15 00:09DECLARE -- 선택
-- 변수, 상수, 커서, 사용자 지정 예외 선언
BEGIN -- 필수
-- SQL 문장
-- PL/SQL 제어 문장
EXCEPTION -- 선택
-- 에러 발생시 수행될 액션
END; -- 필수
2. 주석
DECLARE
sMsg VARCHAR2(10) := '테스트';
BEGIN
-- sMsg := ‘주석 1’; 한줄주석
/* 다중라인 주석
sMsg := ‘주석 2’;
DBMS_OUTPUT.PUT_LINE(sMsg);
*/
DBMS_OUTPUT.PUT_LINE(sMsg);
END;
3. PL/SQL 결과 출력 확인방법
SQL> Set ServerOutput On;
SQL>
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO');
END;
/
명령문이 처리되었습니다.
0.00 초
4. %TYPE 데이터 타입의 예
// c++의 template과 같은 기능
DECLARE
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 = 7369;
DBMS_OUTPUT.PUT_LINE('사원번호:'||v_empno);
DBMS_OUTPUT.PUT_LINE('사원이름:'||v_ename);
DBMS_OUTPUT.PUT_LINE('사원급여:'||v_sal);
END;
사원이름:SMITH
사원급여:880
명령문이 처리되었습니다.
0.00 초
5. %ROWTYPE
// C++의 struct와 비슷한 기능. row를 Struct로 간주.
DECLARE
v_emp emp%ROWTYPE;BEGIN
SELECT empno, ename
INTO v_emp.empno, v_emp.ename
FROM emp
WHERE empno=7369;
DBMS_OUTPUT.PUT_LINE('번호:'||v_emp.empno);
DBMS_OUTPUT.PUT_LINE('이름:'||v_emp.ename);
END;
이름:SMITH
명령문이 처리되었습니다.
0.03 초
6. PL/SQL TABLE
// 1차원 배열과 유사
DECLARE
TYPE empno_table IS TABLE OF emp.empno%TYPE INDEX BY BINARY_INTEGER;
TYPE ename_table IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER;empno_tab empno_table;
ename_tab ename_table;i BINARY_INTEGER := 0;
BEGIN
FOR emp_list IN(SELECT empno, ename FROM emp WHERE deptno=10)
LOOP
i := i + 1;empno_tab(i) := emp_list.empno;
ename_tab(i) := emp_list.ename;
DBMS_OUTPUT.PUT_LINE('번호:'||empno_tab(i));
DBMS_OUTPUT.PUT_LINE('이름:'||ename_tab(i));
END LOOP;
END;
이름:CLARK
번호:7839
이름:KING
번호:7934
이름:MILLER
명령문이 처리되었습니다.
0.01 초
7. PL/SQL Record
// C++의 typedef같은거
// 사용자 정의 struct
DECLARE
TYPE emp_record IS RECORD
(v_empno NUMBER,
v_ename VARCHAR2(30));emp_rec emp_record;
BEGIN
SELECT empno, ename
INTO emp_rec.v_empno, emp_rec.v_ename
FROM emp
WHERE empno=7369;DBMS_OUTPUT.PUT_LINE('번호:'||emp_rec.v_empno);
DBMS_OUTPUT.PUT_LINE('이름:'||emp_rec.v_ename);
END;
이름:SMITH
명령문이 처리되었습니다.
0.00 초
8. IF / ELSE / THEN
DECLARE
sMonth CHAR(2);BEGIN
SELECT TO_CHAR(SYSDATE, 'MM')
INTO sMonth
FROM dual;IF(sMonth>='03' and sMonth<='08') THEN
DBMS_OUTPUT.PUT_LINE('1학기');
ELSE
DBMS_OUTPUT.PUT_LINE('2학기');
END IF;END;
명령문이 처리되었습니다.
0.00 초
9. LOOP
DECLARE
i NUMBER := 0;
nSum NUMBER := 0;BEGIN
LOOP
i := i + 1;
nSum := nSum + i;
EXIT WHEN i >= 100;
END LOOP;
DBMS_OUTPUT.PUT_LINE('1~100까지의 합 : '||TO_CHAR(nSum));
END;
명령문이 처리되었습니다.
0.01 초
10. FOR LOOP
DECLARE
i NUMBER := 0;
nSum NUMBER := 0;BEGIN
FOR i IN 1..100 LOOP
nSum := nSum + i;
END LOOP;DBMS_OUTPUT.PUT_LINE('1~100까지의 합 : '||TO_CHAR(nSum));
END;
명령문이 처리되었습니다.
0.01 초
11. WHILE LOOP
DECLARE
i NUMBER := 0;
nSum NUMBER := 0;BEGIN
WHILE i<100 LOOP
i := i + 1;
nSum := nSum + i;
END LOOP;DBMS_OUTPUT.PUT_LINE('1~100까지의 합 : '||TO_CHAR(nSum));
END;
명령문이 처리되었습니다.
0.01 초
12. GOTO
DECLARE
i NUMBER;BEGIN
FOR i IN 1..50 LOOP
IF i = 30 THEN
GOTO my_label;
END IF;
END LOOP;<<my_label>>
DBMS_OUTPUT.PUT_LINE('i=30');
END;
명령문이 처리되었습니다.
0.02 초
'C.S.E > Database' 카테고리의 다른 글
| [ORACLE] Stored Procedure Exception (0) | 2008/04/15 |
|---|---|
| [ORACLE] Stored Procedure Programming (0) | 2008/04/15 |
| [ORACLE] Stored Procedure (0) | 2008/04/15 |
| [ORACLE] Stored Procedure를 사용한 Insert / Select 시간측정 (0) | 2008/04/14 |
| 오라클(ORACLE) 뷰(VIEW) (0) | 2008/03/30 |
| 오라클(ORACLE) 데이터 처리 함수 (0) | 2008/03/30 |
- Filed under : C.S.E/Database
- Tag : Oracle, Stored Procedure
- Comment Trackback
이올린에 북마크하기