************** ºÎ¼/Á÷¿ø ¸®Æ÷Æ® ******************
ºÎ¼ : ºÎ¼¹øÈ£ ºÎ¼¸í
À§Ä¡
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;
IF ¹®Àå
|
¿¹
Á¾¾÷¿ø À̸§ÀÌ KingÀ̶ó¸é °ü¸®ÀÚ·Î ÀÛ¾÷À» ¼³Á¤ÇÕ´Ï´Ù. Á¾¾÷¿ø À̸§ÀÌ
KingÀÌ ¾Æ´Ï¸é ClerkÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù.
IF v_ename = 'KING' THEN |
IF-THEN-ELSIF ¹®Àå
°¡´ÉÇϸé, Áßø IF ¹®Àå ´ë½Å¿¡ ELSIF ÀýÀ» »ç¿ëÇÕ´Ï´Ù. Äڵ带 Àаí ÀÌÇØ ÇϱⰡ ´õ ½¬¿ì ¸ç ·ÎÁ÷Àº
Á¤È®ÇÏ°Ô ½Äº°µË´Ï´Ù. ELSE Àý ¾ÈÀÇ ÀÛ¾÷ÀÌ ¼ø¼öÇÏ°Ô ´Ù¸¥ IF ¹®ÀåÀ¸·Î ±¸¼ºµÈ´Ù¸é, ÀÌ°ÍÀº ELSIF ÀýÀ» »ç¿ëÇÏ´Â °ÍÀÌ ´õ¿í
Æí¸®ÇÕ´Ï´Ù. Á¶°Ç°ú ¼öÇàÀÌ °¢°¢ Á¾·á½Ã¿¡ Áßø END IF¿¡ ´ëÇØ ÀÏÀÏÀÌ ¿ä±¸ÇÏÁö ¾ÊÀ½À¸·Î½á Äڵ带 ´õ ¸íÈ®ÇÏ°Ô ¸¸µé¾î
ÁÝ´Ï´Ù.
¿¹
IF condition1 THEN
|
À§ÀÇ IF-THEN-ELSIF ¹®Àå ¿¹´Â ´ÙÀ½°ú °°ÀÌ ´õ ÀÚ¼¼È÷ Á¤Àǵ˴ϴÙ:
ÀÔ·ÂµÈ ÁÖ¾îÁø
°ª¿¡ ´ëÇØ, °è»ê °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. ÀÔ·Â °ªÀÌ 100ÀÌ»óÀ̸é, À̶§ °è»ê °ªÀº ÀÔ·Â °ªÀÇ µÎ ¹è°¡ µË´Ï´Ù. ÀÔ·Â °ªÀÌ 50°ú 100»çÀ̶ó¸é,
°è»ê °ªÀº ½ÃÀÛ°ªÀÇ 50%°¡ µÇ°í, ÀԷ°ªÀÌ 50 ¹Ì¸¸ÀÌ¸é °è»ê°ªÀº ½ÃÀÛ°ªÀÇ 10%°¡ µË´Ï´Ù.
ÁÖ: null °ªÀ»
Æ÷ÇÔÇÏ´Â ÀÓÀÇÀÇ ¼ö Ç¥Çö½ÄÀº null·Î Æò°¡ÇÕ´Ï´Ù.
|
ºñ±³ ¿¬»êÀÚ¿Í ºÎ¿ï Á¶°Ç
³í¸® ¿¬»êÀÚ AND, OR, NOTÀ»
°¡Áö°í ´Ü¼øÇÑ ºÎ¿ï Á¶°ÇÀ» Á¶ÇÕÇÔÀ¸·Î½á º¹ÀâÇÑ ºÎ¿ï Á¶°ÇÀ» ±¸ÃàÇÒ ¼ö ÀÖ½À´Ï´Ù. ½½¶óÀ̵忡 º¸¿©Áø ³í¸® Å×ÀÌºí¿¡¼, FALSE ´Â
AND Á¶°Ç¿¡ ´ëÇØ ¿ì¼±¼øÀ§¸¦ °®°í TRUE´Â OR Á¶°Ç¿¡ ´ëÇØ ¿ì¼±¼øÀ§¸¦ °®½À´Ï´Ù. AND ´Â
¾çÂÊ ¿¬»êÀÚ°¡ TRUEÀÏ °æ¿ì¿¡¸¸ TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù. OR Àº ¾çÂÊ ¿¬»êÀÚ°¡ FALSEÀÏ °æ¿ì¸¸ FALSE¸¦ ¹ÝȯÇÕ´Ï´Ù.NULL
AND TRUE´Â ù ¹ø° ¿¬»êÀÚ°¡ TRUE·Î Æò°¡µÇ´ÂÁö ¾Æ´ÑÁö ¾Ë·ÁÁöÁö ¾Ê¾Ò±â ¶§¹®¿¡ Ç×»ó NULL·Î Æò°¡µË´Ï´Ù.
ÁÖ: NULLÀÇ ºÎÁ¤(NOT NULL)Àº null °ªµéÀÌ ¸ðÈ£Çϱ⠶§¹®¿¡ null °ªÀÌ µË´Ï´Ù.
|
³í¸® Á¶°Ç ±¸Ãà
AND ·ÎÁ÷ Å×À̺íÀº À§ÀÇ ½½¶óÀ̵忡¼ ºÎ¿ï Á¶°Ç¿¡
´ëÇÑ °¡´É¼ºÀ» Æò°¡Çϴµ¥ µµ¿òÀ» ÁÙ ¼ö ÀÖ½À´Ï´Ù.
¹Ýº¹ÀûÀÎ Á¦¾î : LOOP ¹®Àå
PL/SQL Àº ¹®Àå ¶Ç´Â ÀÏ·ÃÀÇ
¹®ÀåµéÀ» ¹Ýº¹Çϱâ À§ÇØ ·çÇÁ¸¦ ±¸Á¶ÈÇϱâ À§ÇÑ ¸¹Àº ÆíÀǸ¦ Á¦°øÇÕ´Ï´Ù.
·çÇÁ¹®Àº Á¦¾î ±¸Á¶ÀÇ µÎ ¹ø° À¯ÇüÀÔ´Ï´Ù.
ÀÚ¼¼ÇÑ ³»¿ëÀº
PL/SQL User's Guide and
Reference, Release 7.3 ¶Ç´Â 8.0, ¡°Control Structures¡±¸¦
ÂüÁ¶ÇϽʽÿÀ.
ÁÖ : FOR LOOPÀÇ ´Ù¸¥ ŸÀÔ, Ä¿¼ FOR LOOP ´Â ÈÄ¼Ó Àå¿¡¼
³íÇÕ´Ï´Ù.
|
±âº» ·çÇÁ
LOOP ¿Í END LOOP Å°¿öµå »çÀÌ¿¡ ÀÏ·ÃÀÇ
¹®ÀåµéÀ» Æ÷ÇÔÇÏ´Â LOOP ¹®ÀåÀÇ °¡Àå ´Ü¼øÇÑ ÇüÅ´ ±âº»(¶Ç´Â basic) ·çÇÁÀÔ´Ï´Ù. ½ÇÇà È帧ÀÇ END LOOP ¹®Àå¿¡ µµ´ÞÇÒ ¶§
¸¶´Ù, Á¦¾î´Â ÇØ´ç LOOP ¹®ÀåÀ¸·Î µÇµ¹·Á ÁÝ´Ï´Ù. ±âº» ·çÇÁ´Â ·çÇÁ¿¡ µé¾î°¥ ¶§ Á¶°ÇÀÌ ÀÌ¹Ì ÀÏÄ¡Çß´Ù ÇÒÁö¶óµµ Àû¾îµµ
ÇѹøÀº ¹®ÀåÀÌ ½ÇÇàµË´Ï´Ù.
EXIT ¹®Àå
EXIT ¹®ÀåÀ» »ç¿ëÇÏ¿© ·çÇÁ¸¦ Á¾·áÇÒ ¼ö ÀÖ½À´Ï´Ù.
Á¦¾î´Â END LOOP ¹®Àå ÈÄÀÇ ´ÙÀ½ ¹®ÀåÀ¸·Î Àü´ÞµË´Ï´Ù. IF ¹®Àå ³»¿¡¼ÀÇ ¹®ÀåÀ¸·Î¼ ¶Ç´Â ,·çÇÁ ³»¿¡ ÀÖ´Â µ¶¸³ÀûÀÎ
¹®ÀåÀ¸·Î ¼ EXIT¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. EXIT ¹®ÀåÀº ·çÇÁ ³»ºÎ¿¡ À§Ä¡ÇØ¾ß ÇÕ´Ï´Ù. ÈÄÀÚÀÎ °æ¿ì¿¡ , ·çÇÁÀÇ Á¶°ÇÀûÀÎ
Á¾·á¸¦ Çã¿ëÇϱâ À§ÇØ WHEN ÀýÀ» ÷ºÎÇÒ ¼ö ÀÖ½À´Ï´Ù. EXIT ¹®Àå¿¡ Á÷¸éÇÒ ¶§´Â, WHEN Àý¿¡¼ Á¶°ÇÀÌ Æò°¡µË´Ï´Ù.
Á¶°ÇÀÌ TRUE ¸¦ ¸®ÅÏÇϸé, ·çÇÁ´Â ³¡³ª°í ·çÇÁ ÈÄÀÇ ´ÙÀ½ ¹®ÀåÀ¸·Î Á¦¾î¸¦ Àü´ÞÇÕ´Ï´Ù. ±âº» ·çÇÁ´Â º¹¼ö EXIT ¹®ÀåÀ» Æ÷ÇÔÇÒ
¼ö ÀÖ½À´Ï´Ù.
±âº» ·çÇÁ
½½¶óÀ̵忡¼ º¸¿© ÁØ ±âº» ·çÇÁ ¿¹´Â ´ÙÀ½°ú °°ÀÌ
Á¤Àǵ˴ϴÙ.
ÁÖ: ±âº» ·çÇÁ´Â Á¶°ÇÀÌ ·çÇÁ ¾È¿¡ µé¾î°¥ ¶§ ¸¸Á·µÇ¾ú´Ù ÇÒÁö¶óµµ Àû¾îµµ ÇѹøÀº ±×
¹®ÀåÀ» ½ÇÇàÇÕ´Ï´Ù.
|
FOR ·çÇÁ´Â ±âº» ·çÇÁ¿Í µ¿ÀÏÇÑ ÀÏ¹Ý ±¸Á¶¸¦ °¡Áý´Ï´Ù. ±×¸®°í, PL/SQLÀÌ ¼öÇàÇÒ ¹Ýº¹µÇ´Â ¼ö¸¦
Á¤Çϱâ À§ÇØ LOOP Å°¿öµåÀÇ ¾Õ¿¡ Á¦¾î ¹®ÀåÀ»
»ç¿ëÇÕ´Ï´Ù.
±¸¹®¿¡¼,
counter »ó´ÜÀ̳ª ÇÏ´Ü ¹Ù¿îµå¿¡ µµ´ÞÇÒ ¶§±îÁö ·çÇÁ¸¦
°è¼Ó ¹Ýº¹ÇÔÀ¸·Î½á 1¾¿ ÀÚµ¿ÀûÀ¸·Î Áõ°¡µÇ°Å³ª °¨¼ÒµÇ´Â(°¨¼Ò´Â REVERSE Å°¿öµå°¡
»ç¿ëµÈ´Ù¸é)°ªÀ» °¡Áø ¾Ï½ÃÀûÀ¸·Î ¼±¾ðµÈ Á¤¼öÀÔ´Ï´Ù.
REVERSE »ó´Ü ¹Ù¿îµå¿¡¼ ÇÏ´Ü ¹Ù¿îµå±îÁö ¹Ýº¹ÇÔÀ¸·Î½á À妽º°¡ °¨¼ÒµÇ
µµ·Ï ÇÕ´Ï´Ù. ÇÏÀ§ °ª(ÇÏ´Ü ¹Ù¿îµå)´Â ¿©ÀüÈ÷ óÀ½¿¡ ÂüÁ¶µÊÀ» ÁÖÀÇ
ÇϽʽÿÀ.
lower_bound À妽º
°ªÀÇ ¹üÀ§¿¡ ´ëÇÑ ÇÏ´Ü ¹Ù¿îµå¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
upper_bound À妽º °ªÀÇ ¹üÀ§¿¡ ´ëÇÑ »ó´Ü ¹Ù¿îµå¸¦
ÁöÁ¤ÇÕ´Ï´Ù.
Ä«¿îÅ͸¦ ¼±¾ðÇÏÁö ¸¶½Ê½Ã¿À. ÀÌ°ÍÀº Á¤¼ö·Î ¾Ï½ÃÀûÀ¸·Î ¼±¾ðµË´Ï´Ù.
ÁÖ: ÀÏ·ÃÀÇ ¹®ÀåµéÀº µÎ ¹Ù¿îµå¿¡ ÀÇÇØ
Ä«¿îÅÍ°¡ °áÁ¤µÇ°í Áõ°¡µÉ ¶§¸¶´Ù ½ÇÇàµË´Ï´Ù. ·çÇÁ ¹üÀ§ÀÇ ÇÏ´Ü ¹Ù¿îµå¿Í »ó´Ü ¹Ù¿îµå´Â ¸®ÅÍ·², º¯¼ö, Ç¥Çö½ÄÀÌ µÉ ¼ö ÀÖÁö¸¸ Á¤¼ö·Î Æò°¡Çؾß
ÇÕ´Ï´Ù. ·çÇÁ ¹üÀ§ ÇÏ´Ü ¹Ù¿îµå°¡ »ó´Ü ¹Ù¿îµåº¸´Ù ´õ Å« Á¤¼ö¸¦ Æò°¡ÇÑ´Ù¸é, ÀÏ·ÃÀÇ ¹®ÀåµéÀº ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½¿¡¼ ¹®ÀåÀº
Çѹø¸¸ ½ÇÇàµË´Ï´Ù.
FOR i IN 3..3 LOOP statement1; END LOOP; |
FOR ·çÇÁ ¿¹
|
WHILE ·çÇÁ
Á¦¾î
Á¶°ÇÀÌ ´õ ÀÌ»ó TRUE °¡ ¾Æ´Ò ¶§±îÁö ÀÏ·ÃÀÇ ¹®ÀåµéÀ» ¹Ýº¹Çϱâ À§ÇØ WHILE ·çÇÁ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¶°ÇÀº ¹Ýº¹ÀÌ ½ÃÀÛµÉ
¶§¿¡ Æò°¡µË´Ï´Ù. ·çÇÁ´Â Á¶°ÇÀÌ FALSEÀÏ ¶§ Á¾·áµË´Ï´Ù. ·çÇÁ¸¦ ½ÃÀÛÇÒ ¶§ Á¶°ÇÀÌ FALSE¶ó¸é , À̶§´Â ´õ ÀÌ»ó ¹Ýº¹À»
¼öÇàÇÏÁö ¾Ê½À´Ï´Ù
±¸¹®¿¡¼,
condition ºÎ¿ï º¯¼ö ¶Ç´Â Ç¥Çö½ÄÀÔ´Ï´Ù
(TRUE, FALSE, ¶Ç´Â NULL).
statement Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ PL/SQL ¶Ç´Â
SQL ¹®ÀåÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.
Á¶°Ç ¾È¿¡ Æ÷ÇÔµÈ º¯¼ö°¡ ·çÇÁÀÇ ¾È¿¡¼ º¯°æµÉ ¼ö ¾ø´Ù¸é À̶§ Á¶°ÇÀº TRUE ¸¦ °è¼Ó À¯ÁöÇÏ°í
·çÇÁ´Â Á¾°áµÇÁö ¾Ê½À´Ï´Ù.
ÁÖ: Á¶°ÇÀÌ NULLÀ» ¸®ÅÏÇϸé, ·çÇÁ´Â ½ÇÇàµÇÁö ¾Ê°í ´ÙÀ½ ¹®ÀåÀ¸·Î Á¦¾î¸¦
Àü´ÞÇÕ´Ï´Ù.
|
WHILE ·çÇÁ
½½¶óÀ̵å
¿¹¿¡¼ ¾ç(quantity)ÀÌ Ç׸ñ¿¡¼ ¼Òºñ·Î Çã¿ëµÈ ÃÖ´ë °¡°Ýº¸´Ù ´õ ÀÌ»ó ÀûÁö ¾ÊÀ» ¶§±îÁö ¾ç(quantity)Àº ·çÇÁ°¡ °è¼Ó ¹Ýº¹µÇ¸é¼
Áõ°¡ÇÕ´Ï´Ù.
|
Áßø ·çÇÁ¿Í ·¹À̺í
¿©·¯
´Ü°è·Î ·çÇÁ¸¦ ÁßøÇÒ ¼ö ÀÖ½À´Ï´Ù. WHILE ·çÇÁ ³»¿¡¼ FOR ·çÇÁ¸¦, FOR ·çÇÁ ³»¿¡¼ WHILE ·çÇÁ¸¦ ÁßøÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ë°³ Áßø
·çÇÁ°¡ Á¾°áµÇ¸é ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾Ê´Â ÇÑ µÑ·¯½Î´Â ·çÇÁ°¡ Á¾°áµÇÁö ¾Ê½À´Ï´Ù. ·¹ÀÌºí ¸íÀº ´Ù¸¥ ½Äº°ÀÚµé°ú µ¿ÀÏÇÑ ±ÔÄ¢À» µû¸¨´Ï´Ù. ·¹À̺íÀº °°Àº
¶óÀÎ ¶Ç´Â ´ÙÀ½ ¶óÀο¡¼ ¹®Àå ¾Õ¿¡ À§Ä¡µË´Ï´Ù. ·¹ÀÌºí ±¸ºÐ ¹®ÀÚ(<<label>>) ¾È¿¡ LOOP¶ó´Â ±ÛÀÚ ¾Õ¿¡ ·¹À̺íÀ»
À§Ä¡½ÃÅ´À¸·Î¼ ·çÇÁ¸¦ ·¹À̺í½Ãŵ´Ï´Ù. ·çÇÁ°¡ ·¹À̺íÀÌ µÇ¸é END LOOP ¹®Àå ÈÄ¿¡ ·çÇÁ À̸§À» ¼±ÅÃÀûÀ¸·Î ¾µ ¼ö
ÀÖ½À´Ï´Ù.
|