************** ºÎ¼/Á÷¿ø ¸®Æ÷Æ® ******************
ºÎ¼ : ºÎ¼¹øÈ£ ºÎ¼¸í
À§Ä¡
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 ¿¹¿Ü°¡ ¹ß»ýÇÒ ¶§ ºí·ÏÀº Ç×»ó Á¾·áµÇÁö¸¸, ¸¶Áö¸· Á¶Ä¡ ÀÛ¾÷À»
¼öÇàÇϵµ ·Ï ¿¹¿Ü 󸮱⠺κÐÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹¿Ü¸¦ ÀÏÀ¸Å°´Â µÎ °¡Áö ¹æ¹ý
|
¿¹¿Ü Æ®·¡ÇÎ(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 ÄÄÆÄÀÏ·¯¿¡°Ô Áö½ÃÇÕ´Ï´Ù.
¹Ì¸® Á¤ÀǵÇÁö ¾ÊÀº ¿À¶óŬ ¼¹ö ¿¡·¯
Æ®·¦
±¸¹®¿¡¼: exception ¿¹¿ÜÀÇ
À̸§ÀÔ´Ï´Ù.
±¸¹®¿¡¼: exception ÀÌÀü¿¡
¼±¾ðµÈ ¿¹¿ÜÀÔ´Ï´Ù. |
»ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü Æ®·¡ÇÎ
PL/SQL ¿¡¼´Â °³º°ÀûÀ¸·Î
¿¹¿Ü¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇ PL/SQL ¿¹¿Ü´Â ´ÙÀ½À» ÁؼöÇØ¾ß ÇÕ´Ï´Ù.
»ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü Æ®·¡ÇÎ
¸í½ÃÀûÀ¸·Î ¼±¾ðÇÏ°í
¹ß»ý½ÃÅ´À¸·Î½á »ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü¸¦ Æ®·¦ÇÒ ¼ö ÀÖ½À´Ï´Ù.
1. ¼±¾ð ¼½¼Ç¿¡¼ »ç¿ëÀÚ Á¤ÀÇµÈ ¿¹¿Ü¿¡ ´ëÇÑ À̸§À»
¼±¾ðÇÕ´Ï´Ù.
±¸¹®
exception EXCEPTION; |
±¸¹®¿¡¼: exception ¿¹¿Ü¸íÀÔ´Ï´Ù.
2. ½ÇÇà ¼½¼Ç¿¡¼ ¸í½ÃÀûÀ¸·Î
¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°±â À§ÇØ RAISE ¹®ÀåÀ» »ç¿ëÇÕ´Ï´Ù.
±¸¹®
RAISE exception; |
±¸¹®¿¡¼: exception ¾Õ¿¡ ¼±¾ðµÈ
¿¹¿Ü¸íÀÔ´Ï´Ù.
3. ÇØ´ç ¿¹¿Ü 󸮱⠾ȿ¡ ¼±¾ðµÈ ¿¹¿Ü¸¦ ÂüÁ¶ÇÕ´Ï´Ù. ½½¶óÀÌµå ¿¹¿¡¼ , ÀÌ °í°´Àº ¸¸ÀÏ Á¦Ç°¿¡ ´ëÇÑ ¾î¶²
Àç°í°¡ ³²¾Æ ÀÖ´Ù¸é, µ¥ÀÌÅÍ º£À̽º¿¡¼ Á¦Ç°À» Á¦°ÅÇÒ ¼ö ¾ø´Â ±ÔÄ¢À» °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ±ÔÄ¢À» ¼öÇà½ÃÅ°±â À§ÇØ ¾î¶°ÇÑ Á¦¾àÁ¶°Çµµ ³ÖÀ» ¼ö
¾ø±â ¶§¹®¿¡, °³¹ßÀÚ´Â ¾îÇø®ÄÉÀ̼ǿ¡¼ ±×°ÍÀ» ¸í½ÃÀûÀ¸·Î ó¸®ÇÕ´Ï´Ù. PRODUCT Å×ÀÌºí¿¡¼ DELETE¸¦ ¼öÇàÇϱâ Àü¿¡, Á¦Ç°ÀÇ Àç°í°¡ ÀÖÀ»
¶§´Â INVENTORY Å×À̺íÀ» ÁúÀÇÇÕ´Ï´Ù.
ÁÖ: µ¿ÀÏÇÑ ¿¹¿Ü¸¦ ´Ù½Ã È£Ãâ ȯ°æÀ¸·Î µ¿ÀÏÇÑ ¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°±â
À§ÇØ ¿¹¿Ü 󸮱⿡¼ RAISE ¹®ÀåÀ» »ç¿ëÇÕ´Ï´Ù.
¿¡·¯ Æ®·¡ÇÎ ÇÔ¼ö
|
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 (µðÆúÆ®)À̸é, ¿¡·¯´Â ¸ðµç ÀÌÀüÀÇ ¿¡·¯¸¦ ´ëüÇÕ´Ï´Ù. |
... |
¿¹
... |
************** ºÎ¼/Á÷¿ø ¸®Æ÷Æ® ****************** ºÎ¼ : ºÎ¼¹øÈ£ ºÎ¼¸í
À§Ä¡ »ç¿ø : »ç¹ø À̸§ ±Þ¿©
±Þ¿© µî±Þ
ACCEPT p_deptno PROMPT 'Please enter the department number : ' DECLARE BEGIN |
|