_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈
FrontPage › PL/SQL예제들

Contents

[-]
1 커서, For루프를 사용한 간단한 검색
2 세상에서 제일 간단한 커서
3 함수의 내포
4 프로시저 내포
5 LIKE 연산자의 사용
6 %TYPE의 사용


1 커서, For루프를 사용한 간단한 검색 #

  1. /*
  2. OPEN, FETCH, CLOSE, %FOUND등의 부분이 전혀 필요가 없다.
  3. RPAD()는 2번째 매개변수에 명시한 숫자만큼 3번째 매개변수 글자를 채워준다.
  4. */
  5.  
  6.  
  7. DECLARE CURSOR cur_emp IS
  8. SELECT empno, ename, deptno FROM emp;
  9. BEGIN
  10. 	DECLARE row_count PLS_INTEGER;
  11. 	BEGIN
  12. 		DBMS_OUTPUT.PUT_LINE(RPAD('empno', 5, ' ') || ' ' || 
  13.                 		     RPAD('ename', 10, ' ') || ' ' || 
  14.                         	     RPAD('deptno', 6, ' '));
  15. 		DBMS_OUTPUT.PUT_LINE('-----' || ' ' || '----------' || ' ' || '------');
  16.  
  17.        <>
  18.        FOR cur IN cur_emp LOOP
  19.          --empno : 4, ename : 10, deptno : 2 
  20.          DBMS_OUTPUT.PUT_LINE(RPAD(cur.empno, 4, ' ') || '  ' || 
  21.                               RPAD(cur.ename, 10, ' ') || ' ' || 
  22.                               RPAD(cur.deptno, 2, ' '));
  23.          row_count := cur_emp%ROWCOUNT;	--For 루프에서는 묵시적으로 커서를 닫고 여는 작업을
  24.          					--반복하기 때문에 이와같이 사용해야 한다. 
  25.        END LOOP cursor_loop;
  26.  
  27.        DBMS_OUTPUT.PUT_LINE('');
  28.        DBMS_OUTPUT.PUT_LINE('ROW COUNT : ' || row_count);
  29. 	END;
  30. END;
  31. /
  32.  
  33.  
  34. ====
  35. 결과
  36. ====
  37. empno ename      deptno
  38. ----- ---------- ------
  39. 7369  SMITH      20
  40. 7499  ALLEN      30
  41. 7521  WARD       30
  42. 7566  JONES      20
  43. 7654  MARTIN     30
  44. 7698  BLAKE      30
  45. 7782  CLARK      10
  46. 7788  SCOTT      20
  47. 7839  KING       10
  48. 7844  TURNER     30
  49. 7876  ADAMS      20
  50. 7900  JAMES      30
  51. 7902  FORD       20
  52. 7934  MILLER     10
  53. ROW COUNT : 14
  54.  
  55. PL/SQL 처리가 정상적으로 완료되었습니다.
  56.  
* IE���� �ҽ� ����� �ٹٲ� �ȵ�. MS-Word � �ٿ� ��������. �ٹٲ� �Ǵ� ������: Chrome, Opera, Safari


2 세상에서 제일 간단한 커서 #

  1. FOR cur_count IN (SELECT ename FROM emp)
  2. DBMS_OUTPUT.put_line(cur_count.ename);
  3.  
* IE���� �ҽ� ����� �ٹٲ� �ȵ�. MS-Word � �ٿ� ��������. �ٹٲ� �Ǵ� ������: Chrome, Opera, Safari

3 함수의 내포 #

  1. fn_result NUMBER;
  2. --함수를 정의 한다.
  3. --스크립트이므로 사용할 함수를 미리 정의해야 한다.
  4. FUNCTION iifn(boolean_expression IN BOOLEAN, true_number IN NUMBER, false_number IN NUMBER)
  5. IF boolean_expression THEN
  6. RETURN true_number;
  7. ELSIF NOT boolean_expression THEN
  8. RETURN false_number;
  9. END;
  10. fn_result := iifn(2 > 1, 1, 0);
  11. DBMS_OUTPUT.put_line(fn_result);
  12.  
* IE���� �ҽ� ����� �ٹٲ� �ȵ�. MS-Word � �ٿ� ��������. �ٹٲ� �Ǵ� ������: Chrome, Opera, Safari

4 프로시저 내포 #

  1. f_num NUMBER;
  2. s_num NUMBER;
  3. --입력된 숫자를 뒤바꾸는 프로시저
  4. PROCEDURE swapn(num_one IN OUT NUMBER, num_two IN OUT NUMBER) IS
  5. temp_num NUMBER;
  6. temp_num := num_one;
  7. num_one := num_two;
  8. num_two := temp_num;
  9. END;
  10. f_num := 10;
  11. s_num := 20;
  12. swapn(f_num, s_num);
  13. DBMS_OUTPUT.put_line('First Number = ' || TO_CHAR(f_num));
  14. DBMS_OUTPUT.put_line('Second Number = ' || TO_CHAR(s_num));
  15.  
* IE���� �ҽ� ����� �ٹٲ� �ȵ�. MS-Word � �ٿ� ��������. �ٹٲ� �Ǵ� ������: Chrome, Opera, Safari

5 LIKE 연산자의 사용 #

  1. --날짜중에 월만 가져오게 하는 함수
  2. --예외처리는 공부목적으로 해 놓았다.
  3. CREATE OR REPLACE FUNCTION fn_return_month(hiredate IN DATE)
  4. h_date VARCHAR2(10);
  5. plsql_err EXCEPTION;
  6. h_date := TO_CHAR(TRUNC(hiredate), 'yyyy-mm-dd');
  7. IF h_date LIKE '____-__-__' THEN
  8. RETURN SUBSTR(h_date, 6, 2);
  9. RAISE plsql_err;
  10. WHEN plsql_err THEN
  11. DBMS_OUTPUT.put_line('날짜 형식이 일치하지 않습니다. yyyy-mm-dd 형식으로 맞춰주십시오');
  12. END;
  13. --SELECT fn_return_month(SYSDATE) FROM dual;
  14.  
* IE���� �ҽ� ����� �ٹٲ� �ȵ�. MS-Word � �ٿ� ��������. �ٹٲ� �Ǵ� ������: Chrome, Opera, Safari

6 %TYPE의 사용 #

  1. --사장은 사업이 잘되어 전 사원에게 월급의 30%를 성과금으로 주기로 했다.
  2. --emp.sal 컬럼이 언제 변할지 모르므로 %type형으로 선언하였다.
  3. CREATE OR REPLACE FUNCTION ufn_stock_option(sal emp.sal%TYPE, sal_percent IN NUMBER )
  4. RETURN emp.sal%TYPE
  5. RETURN sal * sal_percent*0.01;
  6. --SELECT empno, ename, ufn_stock_option(sal, 30) "stock option" FROM emp;
  7.  
* IE���� �ҽ� ����� �ٹٲ� �ȵ�. MS-Word � �ٿ� ��������. �ٹٲ� �Ǵ� ������: Chrome, Opera, Safari

댓글 남기기..
이름: : 오른쪽의 새로고침을 클릭해 주세요. 새로고침
EditText : Print : Mobile : FindPage : DeletePage : LikePages : Powered by MoniWiki : Last modified 2018-04-13 23:12:53

자신의 날갯짓만큼 더 높이 나는 새는 없다. (W. 블레이크)