************** ºÎ¼­/Á÷¿ø ¸®Æ÷Æ® ******************

ºÎ¼­ : ºÎ¼­¹øÈ£       ºÎ¼­¸í             À§Ä¡

        10         ACCOUNTING        NEW YORK

»ç¿ø : »ç¹ø     À̸§         ±Þ¿©          ±Þ¿© µî±Þ

       7871    Anderson    2000         ***   
      7890    Andrew       700         * 
      7870    Scott       2400         **** 
      7866    David        900         * 
      7891    Sylvia      3200         *****

2¸íÀÇ ±Þ¿©°¡ ÀλóµÇ¾ú½À´Ï´Ù.


À§¿Í °°Àº ¸®Æ÷Æ®¸¦ »Ì¾Æ³»°í $1000º¸´Ù ÀûÀº ±Þ¿©¸¦ ¹Þ´Â Á÷¿øÀÇ ±Þ¿©¸¦ 10%ÀλóÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¿© º¾´Ï´Ù.

ACCEPT p_deptno PROMPT 'Please enter the department number : '

DECLARE

   v_deptno    NUMBER(2);

   v_dname     CHAR(14);

   v_loc       CHAR(13);

   v_empno     emp.empno%TYPE;

   v_ename     emp.ename%TYPE;

   v_sal       emp.sal%TYPE;

   v_grade     salgrade.grade%TYPE;

   v_dno       emp.deptno%TYPE := &p_deptno;

   CURSOR emp_cursor IS

          SELECLT empno, ename, sal

          FROM emp

          WHERE deptno = &p_deptno;

   e_no_emp    EXCEPTION;

BEGIN

   -- print out the report title

   DBMS_OUTPUT.PUT_LINE('*********ºÎ¼­/Á÷¿ø ¸®Æ÷Æ®*********');

   SELECT  deptno, dname, loc

      INTO v_deptno, v_dname, v_loc

      FROM dept

      WHERE   deptno = v_dno;

   DBMS_OUTPUT.PUT_LINE('ºÎ¼­ :  ºÎ¼­¹øÈ£   ºÎ¼­¸í        À§Ä¡');

   DBMS_OUTPUT.PUT_LINE('     '¡«v_deptno¡«'    '¡«v_dname¡«
                        '   '¡«v_loc¡«'   ');

   DBMS_OUTPUT.PUT_LINE('»ç¿ø : »ç¹ø   À̸§   ±Þ¿©    ±Þ¿©µî±Þ');

   OPEN emp_cursor;

   FETCH emp_cursor INTO v_empno, v_ename, v_sal;

   /* according to the salary amount,

      print out the stars */

   WHILE emp_cursor%FOUND LOOP

      SELECT grade

         INTO v_grade

         FROM salgrade

         WHERE v_sal > losal AND v_sal <hisal;

      DBMS_OUTPUT.PUT('      '¡«v_empno¡«'   '¡«v_ename¡«
                      '      '¡«v_sal¡«'     ');

      FOR I in 1..v_grade LOOP

         DBMS_OUTPUT.PUT('*');

      END LOOP;

      DBMS_OUTPUT.PUT_LINE('');

      FETCH emp_cursor INTO v_empno, v_ename, v_sal;

   END LOOP;

   CLOSE emp_cursor;

   UPDATE emp

      SET     sal = sal * 1.1

      WHERE   sal < 1000;

   IF SQL%ROWCOUNT = 0 THEN

      RAISE e_no_emp;

   ELSE

      DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT ¡«'¸íÀÇ ±Þ¿©°¡ ' ||
                           'ÀλóµÇ¾ú½À´Ï´Ù.');

   END IF;

   COMMIT;

EXCEPTION

   WHEN no_data_found THEN

      DBMS_OUTPUT.PUT_LINE('There is no matching data.');

   WHEN too_many_rows THEN

      DBMS_OUTPUT.PUT_LINE('More than one matching data. ');

   WHEN e_no_emp THEN

      DBMS_OUTPUT.PUT_LINE('No employee with a smaller ' ||
                           'than  $1000.');

   --in case of any other exception

   WHEN others THEN

      DBMS_OUTPUT.PUT_LINE('Some other error occurred.');

END;  

 

°³¿ä

   ¿¹¿Ü´Â PL/SQL ºí·ÏÀÇ ½ÇÇà Áß¿¡ ¹ß»ýÇÏ¿© ºí·ÏÀÇ ÁÖ¿ä ÀÛ¾÷ ºÎºÐÀ» ÁߴܽÃŵ´Ï´Ù.    Ç×»óPL/SQL ¿¹¿Ü°¡ ¹ß»ýÇÒ ¶§ ºí·ÏÀº Ç×»ó Á¾·áµÇÁö¸¸, ¸¶Áö¸· Á¶Ä¡ ÀÛ¾÷À» ¼öÇàÇϵµ    ·Ï ¿¹¿Ü 󸮱⠺κÐÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

   ¿¹¿Ü¸¦ ÀÏÀ¸Å°´Â µÎ °¡Áö ¹æ¹ý

¿¹¿Ü À¯Çü

½ÇÇà Áß¿¡  ÇÁ·Î±×·¥ÀÌ ÁߴܵÇÁö ¾Êµµ·Ï  ¿¹¿Ü¿¡ ´ëÇÑ ÇÁ·Î±×·¥À» ÇÒ ¼ö ÀÖ½À´Ï´Ù. 3°¡Áö Á¾·ùÀÇ ¿¹¿Ü°¡ ÀÖ½À´Ï´Ù.
 

¿¹¿Ü

¼³¸í

󸮿ë Áö½Ã

¹Ì¸® Á¤ÀÇµÈ ¿À¶óŬ ¼­¹ö¿À·ù

PL/SQLÄڵ忡¼­ ÀÚÁÖ ¹ß»ýÇÏ´Â ¾à 20±îÁö ¿À·ù

¼±¾ðÇÒ ¼ö ¾ø°í, ¿À¶óŬ ¼­¹ö°¡ ¾Ï½ÃÀûÀ¸·Î ±×°ÍÀ» ÀÏÀ¸Å°µµ·Ï ÇÕ´Ï´Ù.

¹Ì¸® Á¤ÀǵÇÁö¾ÊÀº ¿À¶óŬ ¼­¹ö¿À·ù

±âŸ Ç¥ÁØ ¿À¶óŬ ¼­¹ö ¿À·ù

¼±¾ð ¼½¼Ç ³»¿¡¼­ ¼±¾ðÇÏ°í, ¿À¶óŬ ¼­¹ö°¡ ¾Ï½ÃÀûÀ¸·Î ±×°ÍÀ» ÀÏÀ¸Å°µµ·Ï ÇÕ´Ï´Ù.

»ç¿ëÀÚ Á¤ÀÇ ¿À·ù

°³¹ßÀÚ°¡ Á¤ÇÑ Á¶°ÇÀÌ ¸¸Á·µÇÁö ¾ÊÀ» °æ¿ì

¼±¾ð¼½¼Ç¿¡¼­ ¼±¾ðÇÏ°í, ¸í½ÃÀûÀ¸·Î ÀÏÀ¸Åµ´Ï´Ù.

ÁÖ: Developer Forms¿Í °°ÀÌ Å¬¶óÀ̾ðÆ®¿¡  PL/SQL¹®ÀÌ ÀÖ´Â ¾îÇø®ÄÉÀ̼ÇÀº µ¶ÀÚÀûÀÎ ¿¹¿Ü¸¦ °¡Áý´Ï´Ù.


¿¹¿Ü Æ®·¡ÇÎ(trapping)

   PL/SQL ºí·ÏÀÇ ¿¹¿Ü ó¸® ¼½¼Ç ³»¿¡¼­ ÇØ´ç ·çƾÀ» Æ÷ÇÔÇÔÀ¸·Î½á ¸ðµç ¿¡·¯¸¦ Æ®·¦ÇÒ    ¼ö ÀÖ½À´Ï´Ù. °¢°¢ÀÇ ¿¡·¯ 󸮱â´Â WHEN Àý·Î ±¸¼ºµÇ´Âµ¥ ±×°÷¿¡ ¿¡·¯´Â ¸í½ÃÇÏ°í,    WHEN Àý µÚ¿¡´Â ¿¹¿Ü°¡ ¹ß»ýµÉ ¶§ ½ÇÇàµÇ±â À§ÇÑ ¹®ÀåµéÀÌ ¿É´Ï´Ù.

   ±¸¹®¿¡¼­,

     exception    ¼±¾ð¼½¼Ç¿¡¼­ ¼±¾ðµÈ ¹Ì¸® Á¤ÀÇµÈ ¿¹¿ÜÀÇ Ç¥ÁØ À̸§ À̰ųª »ç¿ëÀÚ                         Á¤ÀÇ¿¹¿ÜÀÇ À̸§ÀÔ´Ï´Ù.

     statement    Çϳª ÀÌ»óÀÇ PL/SQL ¶Ç´Â SQL¹®ÀåÀÔ´Ï´Ù.

     OTHERS      ¸í½ÃÀûÀ¸·Î ¼±¾ðµÇÁö ¾ÊÀº ¸ðµç ¿¹¿Ü¸¦ Æ®·¦ÇÏ´Â  ¿¹¿Ü ó¸®ÀýÀÔ´Ï´Ù.

WHEN OTHERS ¿¹¿Ü 󸮱â

   ¿¹¿Üó¸® ¼½¼ÇÀº ÁöÁ¤µÈ ¿¹¿Ü¸¸ Æ®·¦ÇÕ´Ï´Ù. OTHERS ¿¹¿Ü 󸮱⸦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é    ´Ù¸¥ ¿¹¿ÜµéÀº Æ®·¦µÇÁö ¾Ê½À´Ï´Ù. ÀÌ°ÍÀº ¾ÆÁ÷ 󸮵ÇÁö ¾ÊÀº ¸ðµç ¿¹¿Ü¸¦ Æ®·¦ÇÕ´Ï    ´Ù. ±×·¯¹Ç·Î, OTHERS´Â ¸¶Áö¸·¿¡ Á¤ÀǵǴ ¿¹¿Ü 󸮱âÀÔ´Ï´Ù.

   OTHERS 󸮱â´Â ¾ÆÁ÷ Æ®·¦µÇÁö ¾ÊÀº ¸ðµç ¿¹¿ÜµéÀ» Æ®·¦ÇÕ´Ï´Ù. ÀϺΠ¿À¶óŬ ÅøµéÀº    ¾îÇø®ÄÉÀ̼ǿ¡¼­ À̺¥Æ®¸¦ ¹ß»ý½ÃÅ°±â À§ÇØ ÀÏÀ¸Å°´Â °³º°ÀûÀÎ ¹Ì¸® Á¤ÀÇµÈ ¿¹¿ÜµéÀ»    °¡Áö°í ÀÖ½À´Ï´Ù. OTHERS´Â ¶ÇÇÑ ÀÌ ¿¹¿Üµéµµ Æ®·¦ÇÕ´Ï´Ù.

¹Ì¸® Á¤ÀÇµÈ ¿À¶óŬ ¼­¹ö ¿¡·¯

ÇØ´ç ¿¹¿Üó¸® ·çƾ¿¡¼­ Ç¥ÁØ À̸§À» ÂüÁ¶ÇÔÀ¸·Î½á  ¹Ì¸® Á¤ÀÇµÈ ¿À¶óŬ ¼­¹ö ¿¡·¯¸¦    Æ®·¦ÇÕ´Ï´Ù.

¹Ì¸®  Á¤ÀÇµÈ ¿¹¿Ü ¸®½ºÆ®ÀÇ ÀÚ¼¼ÇÑ ³»¿ëµéÀº PL/SQL User¡¯s Guide and Reference, Release 7.3 ¶Ç´Â 8.0, ¡°Error Handling.¡±¸¦ ÂüÁ¶ÇϽʽÿÀ.

ÁÖ: PL/SQL Àº STANDARD ÆÐÅ°Áö¿¡  ¹Ì¸® Á¤ÀÇµÈ ¿¹¿Ü¸¦ ¼±¾ðÇÕ´Ï´Ù. °¡Àå ÀϹÝÀûÀÎ ¿¹¿ÜÀÎ NO_DATA_FOUND ¿Í TOO_MANY_ROWS ¿¹¿Ü´Â »ç¿ëÇÏ´Â °ÍÀÌ  ÁÁ½À´Ï´Ù.

¹Ì¸® Á¤ÀÇµÈ ¿À¶óŬ ¼­¹ö ¿¡·¯ Æ®·¦

°¢ ¿¹¿Ü¿¡ ´ëÇÑ ½½¶óÀ̵åÀÇ ¿¹¿¡¼­, »ç¿ëÀÚ¸¦ À§ÇØ ¸Þ½ÃÁö°¡  Àμ⠵˴ϴÙ.

¾î¶² ½ÃÁ¡¿¡¼­µçÁö ÇϳªÀÇ ¿¹¿Ü¸¸ÀÌ ¹ß»ýµÇ°í 󸮵˴ϴÙ.

¹Ì¸® Á¤ÀǵÇÁö ¾ÊÀº ¿À¶óŬ ¼­¹ö ¿¡·¯

¿ì¼± ¿¡·¯¸¦ ¼±¾ðÇÏ°í ³ª¼­ OTHERS 󸮱⸦ »ç¿ëÇÏ¿© ¹Ì¸® Á¤ÀǵÇÁö ¾ÊÀº ¿À¶óŬ ¼­¹ö ¿¡·¯¸¦ Æ®·¦ÇÕ´Ï´Ù. ¼±¾ðµÈ ¿¹¿Ü´Â ¾Ï½ÃÀûÀ¸·Î  ¹ß»ýµË´Ï´Ù. PL/SQL¿¡¼­, pragma EXCEPTION_INIT  ´Â ¿À¶óŬ  ¿¡·¯ ¹øÈ£¿Í  ¿¹¿Ü À̸§À» °ü·Ã½ÃÅ°±â À§ÇØ ÄÄÆÄÀÏ·¯¿¡°Ô  ¾Ë·Á  ÁÝ´Ï´Ù. À̸§À¸·Î ÀÓÀÇÀÇ ³»ºÎ ¿¹¿Ü¸¦ ÂüÁ¶ÇÏ°í ÁöÁ¤ 󸮱⸦ »ç¿ëÇÕ´Ï´Ù.

ÁÖ: PRAGMA (pseudoinstructionÀ̶ó°íµµ ÇÔ)´Â PL/SQL ºí·ÏÀÌ ½ÇÇàµÉ ¶§ 󸮵ÇÁö ¾Ê´Â ÄÄÆÄÀÏ·¯ ¸í·É¹®ÀÓÀ» ÀǹÌÇÏ´Â Å°¿öµåÀÔ´Ï´Ù. ºí·Ï ³»¿¡¼­ ¿¹¿Ü À̸§ÀÌ ¹ß»ýÇÏ¸é ±×°ÍÀ» °ü·ÃµÈ  ¿À¶óŬ ¼­¹ö  ¿¡·¯ ¹øÈ£·Î  Çص¶Çϱâ À§ÇØ  PL/SQL ÄÄÆÄÀÏ·¯¿¡°Ô Áö½ÃÇÕ´Ï´Ù.

¹Ì¸® Á¤ÀǵÇÁö ¾ÊÀº ¿À¶óŬ ¼­¹ö ¿¡·¯ Æ®·¦

1. ¼±¾ð¼½¼Ç¿¡¼­ ¿¹¿Ü À̸§À» ¼±¾ðÇÕ´Ï´Ù.
      
    ±¸¹®
 

exception       EXCEPTION;

    ±¸¹®¿¡¼­:       exception               ¿¹¿ÜÀÇ À̸§ÀÔ´Ï´Ù.

2. PRAGMA EXCEPTION_INIT ¹®ÀåÀ» »ç¿ëÇÏ¿© Ç¥ÁØ ¿À¶óŬ ¼­¹ö ¿¡·¯ ¹øÈ£¿Í ¼±¾ðµÈ ¿¹¿Ü¸¦ °ü·Ã½Ãŵ´Ï´Ù.
        
    ±¸¹®
 

PRAGMA EXCEPTION_INIT(exception, error_number);

     ±¸¹®¿¡¼­:       exception               ÀÌÀü¿¡ ¼±¾ðµÈ ¿¹¿ÜÀÔ´Ï´Ù.
                        error_number          Ç¥ÁØ ¿À¶óŬ ¼­¹ö ¿¡·¯ ¹øÈ£ÀÔ´Ï´Ù.

3. ÇØ´ç ¿¹¿Üó¸® ·çƾ¿¡¼­ ¼±¾ðµÈ ¿¹¿Ü¸¦ ÂüÁ¶ÇÕ´Ï´Ù.
    ½½¶óÀ̵忹¿¡¼­ , Àç°íÇ°ÀÌ ÀÖ´Ù¸é ÇÁ·Î¼¼½ÌÀ» ÁßÁöÇÏ°í »ç¿ëÀÚ¿¡°Ô ¸Þ½ÃÁö¸¦ º¸¿© ÁÝ´Ï´Ù.

ÀÚ¼¼ÇÑ ³»¿ëÀº Oracle Server Messages, Release 7.3 ¶Ç´Â 8.0 À» ÂüÁ¶ÇϽʽÿÀ.

»ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü Æ®·¡ÇÎ

PL/SQL ¿¡¼­´Â °³º°ÀûÀ¸·Î ¿¹¿Ü¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇ PL/SQL ¿¹¿Ü´Â ´ÙÀ½À» ÁؼöÇØ¾ß ÇÕ´Ï´Ù.

»ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü Æ®·¡ÇÎ

¸í½ÃÀûÀ¸·Î ¼±¾ðÇÏ°í  ¹ß»ý½ÃÅ´À¸·Î½á »ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü¸¦ Æ®·¦ÇÒ ¼ö ÀÖ½À´Ï´Ù.

1. ¼±¾ð ¼½¼Ç¿¡¼­ »ç¿ëÀÚ Á¤ÀÇµÈ ¿¹¿Ü¿¡ ´ëÇÑ À̸§À» ¼±¾ðÇÕ´Ï´Ù.
   
     ±¸¹®
 

exception       EXCEPTION;

      ±¸¹®¿¡¼­:       exception               ¿¹¿Ü¸íÀÔ´Ï´Ù.

2. ½ÇÇà ¼½¼Ç¿¡¼­ ¸í½ÃÀûÀ¸·Î ¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°±â À§ÇØ RAISE ¹®ÀåÀ» »ç¿ëÇÕ´Ï´Ù.
   
      ±¸¹®

RAISE exception;

      ±¸¹®¿¡¼­:       exception               ¾Õ¿¡ ¼±¾ðµÈ ¿¹¿Ü¸íÀÔ´Ï´Ù.
 
3. ÇØ´ç ¿¹¿Ü 󸮱⠾ȿ¡ ¼±¾ðµÈ ¿¹¿Ü¸¦ ÂüÁ¶ÇÕ´Ï´Ù.  ½½¶óÀÌµå ¿¹¿¡¼­ , ÀÌ °í°´Àº ¸¸ÀÏ Á¦Ç°¿¡ ´ëÇÑ ¾î¶² Àç°í°¡ ³²¾Æ ÀÖ´Ù¸é, µ¥ÀÌÅÍ º£À̽º¿¡¼­ Á¦Ç°À» Á¦°ÅÇÒ ¼ö ¾ø´Â ±ÔÄ¢À» °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ±ÔÄ¢À» ¼öÇà½ÃÅ°±â À§ÇØ ¾î¶°ÇÑ Á¦¾àÁ¶°Çµµ ³ÖÀ» ¼ö ¾ø±â ¶§¹®¿¡, °³¹ßÀÚ´Â ¾îÇø®ÄÉÀ̼ǿ¡¼­ ±×°ÍÀ» ¸í½ÃÀûÀ¸·Î ó¸®ÇÕ´Ï´Ù. PRODUCT Å×ÀÌºí¿¡¼­ DELETE¸¦ ¼öÇàÇϱâ Àü¿¡, Á¦Ç°ÀÇ Àç°í°¡ ÀÖÀ» ¶§´Â INVENTORY Å×À̺íÀ» ÁúÀÇÇÕ´Ï´Ù.
     
ÁÖ: µ¿ÀÏÇÑ ¿¹¿Ü¸¦ ´Ù½Ã È£Ãâ ȯ°æÀ¸·Î µ¿ÀÏÇÑ ¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°±â À§ÇØ ¿¹¿Ü 󸮱⿡¼­ RAISE ¹®ÀåÀ» »ç¿ëÇÕ´Ï´Ù.

¿¡·¯ Æ®·¡ÇÎ ÇÔ¼ö

   ¿¹¿Ü°¡ ¹ß»ýÇÒ ¶§, µÎ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© °ü·ÃµÈ ¿¡·¯ÄÚµå ¶Ç´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ È®ÀÎÇÒ ¼ö    ÀÖ½À´Ï´Ù.
   
   ÄÚµå ¶Ç´Â ¸Þ½ÃÁö °ª¿¡ µû¶ó, ¿¡·¯¿¡ ´ëÇØ ÃëÇÒ ÀÛ¾÷À» Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. SQLCODE·Î    ³»ºÎ ¿¹¿Ü¿¡ ´ëÇÑ ¿À¶óŬ ¿¡·¯ ¹øÈ£¸¦ ¸®ÅÏÇÕ´Ï´Ù. À̶§ ¿¡·¯ ¹øÈ£¸¦ SQLERRMÀ¸·Î    Àü´ÞÇϸé, ±× ¿¡·¯ ¹øÈ£¿Í °ü·ÃµÈ ¸Þ½ÃÁö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
 

ÇÔ¼ö

¼³¸í

SQLCODE

¿¡·¯Äڵ忡  ´ëÇÑ ¼ýÀÚ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.(NUMBER º¯¼ö¿¡ ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.)

SQLERRM

¿¡·¯¹øÈ£¿Í °ü·ÃµÈ ¸Þ½ÃÁö¸¦ °®´Â ¹®ÀÚµ¥ÀÌÅ͸¦ ¸®ÅÏÇÕ´Ï´Ù.


SQLCODE °ª ¿¹

SQLCODE °ª

¼³¸í

0

¿¹¿Ü°¡ ¾ø½À´Ï´Ù.

1

»ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü.

+100

NO_DATA_FOUND ¿¹¿Ü.

negative number

´Ù¸¥ ¿À¶óŬ ¼­¹ö ¿¡·¯ ¹øÈ£.

¿¹¿Ü Æ®·¡ÇÎ ÇÔ¼ö

WHEN OTHERS Àý¿¡¼­ ¿¹¿Ü°¡ Æ®·¦µÉ ¶§, ÀÌ ¿¡·¯µéÀ» ½Äº°Çϱâ À§ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ½½¶óÀÌµå ¿¹¿¡¼­´Â  º¯¼ö¿¡ ÁöÁ¤µÈ SQLCODE  °ª°ú SQLERRM °ªÀ» ±â¼úÇÕ´Ï´Ù. À̶§ ÀÌ º¯¼öµéÀ» SQL ¹®Àå¿¡¼­ »ç¿ëÇÕ´Ï´Ù.

SQLERRM °ªÀ» º¯¼ö¿¡ ÀúÀåÇÏ·Á Çϱâ Àü¿¡ ¾Ë·ÁÁø ±æÀÌ·Î  SQLERRM °ªÀ» Àý´Ü½Ãŵ´Ï´Ù.

¼­ºêºí·Ï¿¡¼­ ¿¹¿Ü Àü´Þ

   ¿¹¿Ü¸¦ ó¸®ÇÑ ÈÄ ¼­ºêºí·ÏÀº Á¤»óÀûÀ¸·Î Á¾·áµÇ°í Á¦¾î°¡ ¼­ºê ºí·ÏÀÇ END ¹®ÀåÀ¸·Î    °¡¼­ ¹Ù·Î µÑ·¯½Î´Â ºí·Ï(»óÀ§ºí·Ï)À¸·Î ³Ñ¾î°©´Ï´Ù. ±×·¯³ª PL/SQL ºí·ÏÀÌ ¿¹¿Ü¸¦    ÀÏÀ¸Å°°í ±× ºí·ÏÀÌ ¿¹¿Ü¿¡ ´ëÇÑ Ã³¸®±â¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù¸é, ¿¹¿Ü´Â 󸮱⸦ ¹ß°ß    ÇÒ ¶§±îÁö °è¼ÓÇؼ­  µÑ·¯½Î´Â ºí·Ï¿¡°Ô Àü´ÞµË´Ï´Ù. ¿¹¿Ü¸¦ ó¸®ÇÏ´Â ºí·ÏÀÌ Çϳªµµ    ¾øÀ¸¸é, È£½ºÆ® ȯ°æ¿¡ 󸮵ÇÁö ¾ÊÀº ¿¹¿Ü·Î ³ªÅ¸³³´Ï´Ù. ¿¹¿Ü°¡ µÑ·¯½Î´Â ºí·Ï(»óÀ§    ºí·Ï)À¸·Î Àü´ÞµÉ ¶§, ±× ºí·Ï ¾È¿¡ ³²¾Æ ÀÖ´Â ³ª¸ÓÁö ½ÇÇà ÀÛ¾÷Àº ¼öÇàµÇÁö ¾Ê°í Åë°ú    µË´Ï´Ù.ÀÌ·¯ÇÑ Ã³¸® ¹æ¹ýÀÇ ÀåÁ¡ °¡¿îµ¥ Çϳª´Â µÑ·¯½Î´Â ºí·Ï¿¡ ´ëÇؼ­´Â º¸´Ù ÀϹÝÀû    ¿¹¿Ü󸮸¦ ÇÏ°Ô ÇÏ´Â ¹Ý¸é, °³º° ºí·Ï¿¡¼­´Â µ¶Á¡ÀûÀÎ ¿¡·¯ÀÇ Ã³¸®¸¦  ÇÏ´Â ¹®ÀåÀ» ¾µ    ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.

Ç¥ÁØÈ­µÇÁö ¾ÊÀº ¿¡·¯ ÄÚµå¿Í ¿¡·¯ ¸Þ½ÃÁö¸¦ ¸®ÅÏÇÏ´Â RAISE_APPLICATION_ERRORÇÁ·Î½ÃÀú¸¦ »ç¿ëÇÕ´Ï´Ù. RAISE_APPLICATION_ERROR ·Î ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ ¿¡·¯¸¦ º¸°íÇÒ ¼ö ÀÖ°í 󸮵ÇÁö ¾ÊÀº ¿¹¿Ü°¡ ¸®ÅϵÇÁö ¾Êµµ·Ï ÇÕ´Ï´Ù.
±¸¹®¿¡¼­,

error_number

-20000 °ú  20999 »çÀÌÀÇ, ¿¹¿Ü¿¡ ´ëÇØ ÁöÁ¤µÈ ¹øÈ£ÀÔ´Ï´Ù.

message

¿¹¿Ü¿¡ ´ëÇÑ »ç¿ëÀÚ ÁöÁ¤ ¸Þ½ÃÁöÀÔ´Ï´Ù.  2048¹ÙÀÌÆ® ±æÀ̱îÁöÀÇ ¹®ÀÚ¿­ÀÔ´Ï´Ù.

TRUE |  FALSE

¼±ÅÃÀû ºÎ¿ï ¸Å°³º¯¼öÀÔ´Ï´Ù. TRUEÀ̸é, ¿¡·¯´Â ÀÌÀüÀÇ ¿¡·¯ ½ºÅÿ¡ À§Ä¡ÇÏ°Ô µË´Ï´Ù.  FALSE (µðÆúÆ®)À̸é, ¿¡·¯´Â ¸ðµç ÀÌÀüÀÇ ¿¡·¯¸¦ ´ëüÇÕ´Ï´Ù.


¿¹

...
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    RAISE_APPLICATION_ERROR (-20201,
        'Manager is not a valid employee.');
END;

¿¹

...
DELETE FROM emp
WHERE mgr = v_mgr ;
IF SQL%NOTFOUND THEN
   RAISE_APPLICATION_ERROR(-20202,'This is not a valid manager') ;
END IF ;
...

************** ºÎ¼­/Á÷¿ø ¸®Æ÷Æ® ******************

ºÎ¼­ : ºÎ¼­¹øÈ£       ºÎ¼­¸í             À§Ä¡

        10         ACCOUNTING        NEW YORK

»ç¿ø : »ç¹ø     À̸§         ±Þ¿©          ±Þ¿© µî±Þ

       7871    Anderson    2000         ***   
      7890    Andrew       700         * 
      7870    Scott       2400         **** 
      7866    David        900         * 
      7891    Sylvia      3200         *****

2¸íÀÇ ±Þ¿©°¡ ÀλóµÇ¾ú½À´Ï´Ù.


À§¿Í °°Àº ¸®Æ÷Æ®¸¦ »Ì¾Æ³»°í $1000º¸´Ù ÀûÀº ±Þ¿©¸¦ ¹Þ´Â Á÷¿øÀÇ ±Þ¿©¸¦ 10%ÀλóÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¿© º¾´Ï´Ù.

ACCEPT p_deptno PROMPT 'Please enter the department number : '

DECLARE

   v_deptno    NUMBER(2);

   v_dname     CHAR(14);

   v_loc       CHAR(13);

   v_empno     emp.empno%TYPE;

   v_ename     emp.ename%TYPE;

   v_sal       emp.sal%TYPE;

   v_grade     salgrade.grade%TYPE;

   v_dno       emp.deptno%TYPE := &p_deptno;

   CURSOR emp_cursor IS

          SELECLT empno, ename, sal

          FROM emp

          WHERE deptno = &p_deptno;

   e_no_emp    EXCEPTION;

BEGIN

   -- print out the report title

   DBMS_OUTPUT.PUT_LINE('*********ºÎ¼­/Á÷¿ø ¸®Æ÷Æ®*********');

   SELECT  deptno, dname, loc

      INTO v_deptno, v_dname, v_loc

      FROM dept

      WHERE   deptno = v_dno;

   DBMS_OUTPUT.PUT_LINE('ºÎ¼­ :  ºÎ¼­¹øÈ£   ºÎ¼­¸í        À§Ä¡');

   DBMS_OUTPUT.PUT_LINE('     '¡«v_deptno¡«'    '¡«v_dname¡«
                        '   '¡«v_loc¡«'   ');

   DBMS_OUTPUT.PUT_LINE('»ç¿ø : »ç¹ø   À̸§   ±Þ¿©    ±Þ¿©µî±Þ');

   OPEN emp_cursor;

   FETCH emp_cursor INTO v_empno, v_ename, v_sal;

   /* according to the salary amount,

      print out the stars */

   WHILE emp_cursor%FOUND LOOP

      SELECT grade

         INTO v_grade

         FROM salgrade

         WHERE v_sal > losal AND v_sal <hisal;

      DBMS_OUTPUT.PUT('      '¡«v_empno¡«'   '¡«v_ename¡«
                      '      '¡«v_sal¡«'     ');

      FOR I in 1..v_grade LOOP

         DBMS_OUTPUT.PUT('*');

      END LOOP;

      DBMS_OUTPUT.PUT_LINE('');

      FETCH emp_cursor INTO v_empno, v_ename, v_sal;

   END LOOP;

   CLOSE emp_cursor;

   UPDATE emp

      SET     sal = sal * 1.1

      WHERE   sal < 1000;

   IF SQL%ROWCOUNT = 0 THEN

      RAISE e_no_emp;

   ELSE

      DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT ¡«'¸íÀÇ ±Þ¿©°¡ ' ||
                           'ÀλóµÇ¾ú½À´Ï´Ù.');

   END IF;

   COMMIT;

EXCEPTION

   WHEN no_data_found THEN

      DBMS_OUTPUT.PUT_LINE('There is no matching data.');

   WHEN too_many_rows THEN

      DBMS_OUTPUT.PUT_LINE('More than one matching data. ');

   WHEN e_no_emp THEN

      DBMS_OUTPUT.PUT_LINE('No employee with a smaller ' ||
                           'than  $1000.');

   --in case of any other exception

   WHEN others THEN

      DBMS_OUTPUT.PUT_LINE('Some other error occurred.');

END;  

 

X Á¤´ä:B


X Á¤´ä:B


X Á¤´ä:B


X Á¤´ä:B


X Á¤´ä:C


X Á¤´ä:B


X Á¤´ä:ABD


X Á¤´ä:A