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

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

        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À» »ç¿ëÇÏ¿© µ¥ÀÌÅÍ Àбâ

µ¥ÀÌÅͺ£À̽º¿¡¼­ µ¥ÀÌÅ͸¦ ÀÐ¾î µéÀ̱â À§ÇØ SELECT ¹®ÀåÀ» »ç¿ëÇÕ´Ï´Ù.  
 
±¸¹®¿¡¼­,

select_list

ÃÖ¼ÒÇÑ ÇÑ °³ ÀÌ»óÀÇ ¿­ÀÇ ¸ñ·ÏÀ̸ç, SQL Ç¥Çö½Ä, Çà ÇÔ¼ö, ±×·ì ÇÔ¼ö¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù.

variable_name

ÀÐ¾î µéÀÎ °ªÀ» ÀúÀåÇϱâ À§ÇÑ ½ºÄ®¶ó º¯¼öÀÔ´Ï´Ù.

record_name

ÀÐ¾î µéÀÎ °ªÀ» ÀúÀåÇϱâ À§ÇÑ PL/SQL RECORDÀÔ´Ï´Ù.

table

µ¥ÀÌÅͺ£À̽º Å×ÀÌºí ¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù.

condition

PL/SQL º¯¼ö¿Í »ó¼ö¸¦ Æ÷ÇÔÇÏ¿© ¿­¸í, Ç¥Çö½Ä, »ó¼ö, ºñ±³¿¬»êÀÚ·Î ±¸¼ºµË´Ï´Ù.

SELECT ¹®Àå¿¡ ´ëÇÑ ¸ðµç ±¸¹®Çü½ÄÀ» ÀÌ¿ëÇϽʽÿÀ.
È£½ºÆ® º¯¼ö´Â ÄÝ·ÐÀ¸·Î Á¢µÎ¾î¸¦ ºÙ¿©¾ß ÇÔÀ» ¸í½ÉÇϽʽÿÀ.

INTO Àý

   INTO ÀýÀº ÇʼöÀ̸ç SELECT¿Í FROM »çÀÌ¿¡ À§Ä¡ÇÕ´Ï´Ù. ÀÌ°ÍÀº SELECT Àý¿¡¼­    SQLÀÌ ¸®ÅÏÇÏ´Â °ªÀ» ÀúÀåÇϱâ À§ÇÑ º¯¼öÀÇ À̸§À» ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµË´Ï´Ù. ¼±ÅÃµÈ    °¢ Ç׸ñ ´ç ÇϳªÀÇ º¯¼ö¸¦ Á¦°øÇØ¾ß ÇÏ°í, ¼ø¼­´Â ¼±ÅÃµÈ Ç׸ñ¿¡ ´ëÇØ °°¾Æ¾ß ÇÕ´Ï´Ù.    PL/SQL º¯¼ö ¶Ç´Â È£½ºÆ® º¯¼öµµ INTO Àý¿¡ »ç¿ëÇÕ´Ï´Ù.

   
ÁúÀÇ´Â ÇϳªÀÇ Çุ ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù.

   PL/SQL ºí·Ï ³»ÀÇ SELECT ¹®ÀåÀº ´ÙÀ½ ±ÔÄ¢À» Àû¿ëÇÏ´Â, Embbeded SQLÀÇ ANSI    ¹üÁÖ¿¡ ¼ÓÇÕ´Ï´Ù. ÁúÀÇ´Â ÇϳªÀÇ Çุ ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù. ÇϳªÀÇ Çà ÀÌ»ó ¶Ç´Â ÇàÀÌ ¾ø´Â    °ÍÀº ¿¡·¯¸¦ »ý¼ºÇÕ´Ï´Ù.

   PL/SQLÀº NO_DATA_FOUND ¿Í TOO_MANY_ROWS ¿¹¿Ü(¿¹¿Ü󸮴 ÈÄ¼Ó Àå¿¡¼­    ¼³¸íÇÕ´Ï´Ù.)·Î ºí·ÏÀÇ ¿¹¿Ü ¼½¼Ç¿¡¼­ ÃßÀûÇÒ ¼ö Àִ ǥÁØ ¿¹¿Ü¸¦ Á¶¼ºÇÏ¿© ÀÌ ¿¡·¯¸¦    Ã³¸®ÇÕ´Ï´Ù. ´ÜÀÏ ÇàÀ» ¸®ÅÏÇϱâ À§ÇØ SELECT ¹®ÀåÀ» ¸¸µé¾î¾ß ÇÕ´Ï´Ù.

Áöħ

   PL/SQL¿¡¼­ µ¥ÀÌÅ͸¦ ÀÐ¾î µéÀ̱â À§ÇØ ÀÌ ÁöħµéÀ» ÀÌÇàÇÕ´Ï´Ù.


PL/SQLÀ» »ç¿ëÇÑ µ¥ÀÌÅÍ Á¶ÀÛ

  DML(data manipulation) ¸í·É¾î¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º¿¡¼­ µ¥ÀÌÅ͸¦ Á¶ÀÛÇÕ´Ï´Ù.   PL/SQL¿¡¼­ Á¦ÇÑ ¾øÀÌ  DML  ¸í·É  INSERT,  UPDATE  ±×¸®°í  DELETE¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. PL/SQLÄڵ忡 COMMIT  ¶Ç´Â  ROLLBACK  ¹®ÀåÀ» Æ÷ÇÔÇÔÀ¸·Î½á Çà Àá±Ý (Å×À̺í Àá±Ý)Àº ÇØÁ¦µË´Ï´Ù


  • INSERT ¹®ÀåÀº Å×ÀÌºí¿¡ µ¥ÀÌÅÍÀÇ »õ ÇàÀ» Ãß°¡ÇÕ´Ï´Ù.  
  • UPDATE ¹®ÀåÀº Å×ÀÌºí¿¡¼­ Á¸ÀçÇÏ´Â ÇàÀ» ¼öÁ¤ÇÕ´Ï´Ù. 
  • DELETE ¹®ÀåÀº Å×ÀÌºí¿¡¼­ ¿øÄ¡ ¾Ê´Â ÇàÀ» Á¦°ÅÇÕ´Ï´Ù

µ¥ÀÌÅÍ »ðÀÔ

ÁÖ: INSERT  ¸í·É¿¡¼­ ½Äº°ÀÚ¿Í ¿­ À̸§¿¡ ¸ðÈ£¼ºÀÌ ÀÖ´Â °ÍÀº ºÒ°¡´ÉÇÕ´Ï´Ù. INSERT Àý¿¡ ÀÖ´Â ½Äº°ÀÚ´Â µ¥ÀÌÅͺ£À̽º ¿­ À̸§À̾î¾ß ÇÕ´Ï´Ù.

µ¥ÀÌÅÍ °»½Å°ú »èÁ¦

    ÁöÁ¤ ¿¬»êÀÚÀÇ ÁÂÃø¿¡ ÀÖ´Â ½Äº°ÀÚ´Â Ç×»ó µ¥ÀÌÅÍ º£À̽º ¿­ÀÌÁö¸¸, ¿À¸¥ÂÊ¿¡ ÀÖ´Â     ½Äº°ÀÚµµ µ¥ÀÌÅͺ£À̽º ¿­ ¶Ç´Â PL/SQL º¯¼öµµ µÉ ¼ö Àֱ⠶§¹®¿¡ UPDATE ¹®ÀåÀÇ     SET Àý¿¡¼­ ¸ðÈ£¼ºÀÌ Á¸ÀçÇÒ ¼ö ÀÖ½À´Ï´Ù. PL/SQL¿¡¼­ÀÇ SELECT ¹®Àå°ú ´Þ¸® ¼öÁ¤µÈ     ÇàÀÌ ¾øÀ¸¸é  ¿¡·¯°¡  ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù.

    ÁÖ: PL/SQL º¯¼ö ÁöÁ¤Àº Ç×»ó  :=  À»,  SQL  ¿­ ÁöÁ¤Àº Ç×»ó = À» »ç¿ëÇÕ´Ï´Ù. ¿­¸í°ú     ½Äº°ÀÚ¸íÀÌ WHERE Àý¿¡¼­ °°´Ù¸é, ¿À¶óŬ ¼­¹ö´Â À̸§¿¡ ´ëÇؼ­ ¿ì¼± µ¥ÀÌÅͺ£À̽º¸¦     Á¶»çÇÔÀ» »ó±âÇϽʽÿÀ.


µ¥ÀÌÅÍ»èÁ¦

 ÁöÁ¤µÈ ÁÖ¹®À» »èÁ¦ÇÕ´Ï´Ù.
 

DECLARE
  v_ordid       ord.ordid%TYPE := 605;
BEGIN
  DELETE FROM   item
    WHERE       ordid = v_ordid;
END;

À̸§ ÁöÁ¤ ±Ô¾à

    PL/SQL º¯¼ö¸í°ú µ¥ÀÌÅͺ£À̽º ¿­¸íÀ» ±¸ºÐÇØ ÁÖ´Â À̸§ ÁöÁ¤ ±Ô¾àÀ» µû¸§À¸·Î½á     WHERE Àý¿¡¼­ ¸ðÈ£¼ºÀ» ȸÇÇÇÕ´Ï´Ù.

    ½½¶óÀ̵忡¼­ º¸¿©ÁØ ¿¹´Â ´ÙÀ½°ú °°ÀÌ Á¤Àǵ˴ϴÙ. ÃâÇÏ ÀÏÀÚ°¡ ¿À´ÃÀÎ °æ¿ì, ORD     Å×ÀÌºí ¿¡¼­ ÁÖ¹®ÀÏ°ú  ÃâÇÏ ÀÏÀÚ¸¦ ÀÐ¾î µéÀÔ´Ï´Ù.

    PL/SQLÀº ½Äº°ÀÚ°¡ µ¥ÀÌÅͺ£À̽º³»ÀÇ ¿­ÀÎÁö ¾Æ´ÑÁö¸¦ ¸ÕÀú È®ÀÎÇÏ°í, ¾Æ´Ï¸é     PL/SQLÀÇ ½Äº°ÀÚ°¡ µÇ´Â °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù.

    ÁÖ: SELECT Àý¿¡¼­ ÀÓÀÇÀÇ ½Äº°ÀÚ´Â µ¥ÀÌÅͺ£À̽º ¿­ À̸§À̾î¾ß Çϱ⠶§¹®¿¡     SELECTÀý¿¡¼­ ¸ðÈ£¼ºÀÇ °¡´É¼ºÀº ¾ø½À´Ï´Ù. INTO Àý¿¡¼­ ½Äº°ÀÚ´Â PL/SQL º¯¼ö¿©¾ß     Çϱ⠶§¹®¿¡  INTO  Àý¿¡¼­ ¸ðÈ£¼ºÀÇ °¡´É¼ºÀº ¾ø½À´Ï´Ù.  WHERE  Àý¿¡¼­¸¸ È¥¶õÀÇ     °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. NO_DATA_FOUND¿Í ´Ù¸¥ ¿¹¿Ü¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ Àå¿¡¼­     ¼³¸íµË´Ï´Ù.


Æ®·£Àè¼Ç Á¦¾î

COMMIT°ú ROLLBACK SQL ¹®ÀåÀ¸·Î Æ®·£Àè¼Ç ³í¸®¸¦ Á¦¾îÇÔÀ¸·Î½á  µ¥ÀÌÅͺ£À̽º¸¦ ¿µ±¸ÀûÀ¸·Î º¯°æÇÏ°Ô ÇÕ´Ï´Ù. ¿À¶óŬ ¼­¹ö¿¡¼­¿Í ¸¶Âù°¡Áö·Î, DML Æ®·£Àè¼ÇÀº COMMIT ¶Ç´Â ROLLBACKÀ» ¼öÇàÇÑ ´ÙÀ½¿¡ ½ÃÀÛÇÏ°í ¼º°øÀûÀÎ COMMIT ¶Ç´Â ROLLBACK ´ÙÀ½¿¡ Á¾·áÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷Àº PL/SQL ºí·Ï¿¡¼­ ¹ß»ýÇÒ ¼ö Àְųª È£½ºÆ® ȯ°æ( ¿¹¸¦ µé¸é, SQL*Plus  ¼½¼Ç Á¾·á´Â  ÀÚµ¿ÀûÀ¸·Î  ¹Ì°á  Æ®·£Àè¼ÇÀ» Ä¿¹Ô ) ¿¡¼­ À̺¥Æ®ÀÇ °á°ú·Î¼­ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
   
COMMIT ¹®Àå


COMMITÀº µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ ¸ðµç ¹Ì°á º¯°æÀ» ¿µ±¸È­ÇÔÀ¸·Î½á ÇöÀç Æ®·£Àè¼ÇÀ»    Á¾·áÇÕ´Ï´Ù.
   
±¸¹®
 

COMMIT [WORK];

ROLLBACK [WORK];


   ¿©±â¼­:         WORK            ANSI Ç¥ÁØÀ» µû¸£±â À§ÇØ »ç¿ëÇÕ´Ï´Ù.
  

ÁÖ: È£½ºÆ® ȯ°æ¸¶´Ù ±× »ç¿ë¿¡ ´ëÇØ ¾à°£ÀÇ Á¦ÇÑÀÌ ÀÖÀ» ¼ö ÀÖÁö¸¸ Æ®·£Àè¼Ç Á¦¾î ¸í·ÉÀº  PL/SQL¿¡¼­ ¸ðµÎ À¯È¿ÇÕ´Ï´Ù. ºí·Ï¿¡¼­ ¶ÇÇÑ ¸í½ÃÀûÀ¸·Î Àá±Ý ¸í·É (LOCK TABLE °ú SELECT ... FOR UPDATE °°Àº)À»  ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. (ÈÄ¼Ó Àå¿¡¼­ FOR-UPDATE¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ¼³¸íÇÒ °ÍÀÔ´Ï´Ù.)  ±×°ÍµéÀº Æ®·£Àè¼Ç Á¾·á±îÁö ¿µÇâÀ» ¹ÌÄ¡¸ç ÇϳªÀÇ PL/SQL ºí·ÏÀº  ÇϳªÀÇ  Æ®·£Àè¼ÇÀ» ¹Ýµå½Ã ÀǹÌÇÏÁö´Â ¾Ê½À´Ï´Ù.

SQL Ä¿¼­

   SQL ¹®ÀåÀ» ½ÇÇàÇÒ ¶§¸¶´Ù ¿À¶óŬ ¼­¹ö´Â ¸í·ÉÀÌ ºÐ¼®µÇ°í ½ÇÇàµÇ´Â °÷¿¡¼­ ¸Þ¸ð¸® ¿µ¿ªÀ» °³¹æÇÕ´Ï´Ù. ÀÌ ¿µ¿ªÀº cursor ¶ó ºÒ¸³´Ï´Ù. ºí·ÏÀÇ ½ÇÇà ºÎºÐÀÌ SQL ¹®ÀåÀ» ½ÇÇàÇÒ ¶§, PL/ SQLÀº SQL ½Äº°ÀÚ¸¦ °¡Áö´Â ¾Ï½ÃÀû Ä¿¼­¸¦ »ý¼ºÇÕ´Ï´Ù. PL/SQLÀº ÀÚµ¿ÀûÀ¸·Î ÀÌ Ä¿¼­¸¦ °ü¸®ÇÕ´Ï´Ù. ¸í½ÃÀû Ä¿¼­´Â ¸í½ÃÀûÀ¸·Î ¼±¾ðµÇ°í ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ ¸í¸íµË´Ï´Ù. PL/SQL Ä¿¼­¿¡ Àû¿ëµÉ ¼ö ÀÖ´Â ÀÌ¿ë °¡´ÉÇÑ 4°¡Áö ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù.

   ÁÖ: ¸í½ÃÀû Ä¿¼­¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ÈÄ¼Ó Àå¿¡¼­ ³íÇÕ´Ï´Ù.

   ÀÚ¼¼ÇÑ ³»¿ëÀº PL/SQL User's Guide and Reference, Release 7.3 ¶Ç´Â 8.0,   ¡° Interaction with Oracle.¡±¸¦ ÂüÁ¶ÇϽʽÿÀ.


SQL Ä¿¼­ ¼Ó¼º

   SQL Ä¿¼­ ¼Ó¼ºÀº ¾Ï½ÃÀû Ä¿¼­°¡ ¸¶Áö¸·À¸·Î »ç¿ëµÈ ¶§ ÀϾ ÀÏÀ» Æò°¡ÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù. PL/SQL ¹®Àå¿¡¼­ ÀÌ ¼Ó¼ºÀ» ÇÔ¼öó·³ »ç¿ëÇÕ´Ï´Ù. À̰͵éÀº SQL ¹®Àå¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. µ¥ÀÌÅÍ Á¶ÀÛ ¹®ÀåÀÇ ½ÇÇà¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò±â À§ÇØ ºí·ÏÀÇ ¿¹¿Ü ¼½¼Ç¿¡¼­, SQL%ROWCOUNT, SQL%FOUND, SQL%NOTFOUND, ±×¸®°íSQL%ISOPEN ¼Ó¼ºÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. PL/SQLÀº ¿¹¿Ü¸¦ ¸®ÅÏÇÏ´Â SELECT ¹®Àå°ú  ´Þ¸®, ¾Æ¹«·± Çà¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â DML ¹®ÀåÀ» ½ÇÆÐÇÑ °ÍÀ¸·Î °£ÁÖÇÏÁö ¾Ê½À´Ï´Ù
.

X Á¤´ä:C


X Á¤´ä:A


X Á¤´ä:DE