|
|
[ÀϹÝ] µ¿Àû SQL(Dynamic SQL)ÀÇ »ç¿ë¹æ¹ý |
|
È£¼® ´Ô²²¼ ¾´ ±ÛÀÔ´Ï´Ù - 211.¢½.74.31 |
ÀÐÀ½:5863 |
|
|
µ¿Àû SQL(Dynamic SQL)ÀÇ »ç¿ë¹æ¹ý - EXECUTE IMMEDIATE - | PL/SQL 2006.03.22 16:22
kj_choi Ä«Æä¸Å´ÏÀú http://cafe.naver.com/pdsinc/74
°ü·Ã ¸µÅ©
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl09.htm *(ÀϺ» : Ãßõ)
http://blog.naver.com/swinter8/130000770771 (Çѱ¹ : °Ãß, ÀÚ¼¼ÇÑ ¼³¸í°ú »ùÇüҽº )
http://www.utexas.edu/its/unix/reference/oracledocs/v92/B10501_01/appdev.920/a96624/11_dynam.htm#13131
(¿µ¾î : Ãßõ, »ç¿ë¼³¸í)
À§ÀÇ ¸µÅ©¸¸ ºÁµµ »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù¸¸ Àú °°Àº Ãʺ¸ÀÚ¸¦ À§ÇÏ¿© ºÎ¿¬ ¼³¸íµå¸³´Ï´Ù.
Á¦°¡ ¸¸µé°í ½Í¾ú´ø°ÍÀº ÆÐÅ°Áö ¹Ùµð¿¡ Á¤ÀÇÇÑ ÇÁ·Î½ÃÁ®°¡ INPUTÆĶó¸ÞŸ·Î ¹ÞÀº Á¤º¸·Î
Å×À̺íÀÇ Æ¯Á¤°ªÀ» °®´Â µ¥ÀÌŸµéÀ» °»½ÅÇϵÇ, °»½Å ´ë»óµ¥ÀÌŸ°¡ ¾øÀ¸¸é
¿¡·¯·Î ó¸®ÇÏ´Â °ÍÀ̾ú½À´Ï´Ù.
select ¹®¿¡ ´ëÇÑ ¿¹´Â ¸¹¾Ò´Âµ¥ updateÇÒ¶§ °»½Å°á°ú¸¦ ¾î¶»°Ô ¹Þ¾Æ¾ß ÇÏ´ÂÁö ¸ô¶ó¼ Á¤¸» ¸¹ÀÌ
°í¹ÎÇߴµ¥ --; SQL%ROWCOUNT ·Î ±â³É ¹Þ¾ÆÁö´õ±º¿ä
<Sample 1>--------------------------------------------------------------------------
PROCEDURE UPD_PRG
(
i_up_time IN DATE
,o_rtn OUT VARCHAR2
)
-- »ó¼ö¼±¾ð
cn_pkg_name CONSTANT VARCHAR2(20) := 'UPD_PKG';
-- º¯¼ö¼±¾ð
w_sql_data VARCHAR2(4096);
w_update_flag NUMBER := 0;
w_out VARCHAR2(3);
w_up_time DATE;
w_up_name VARCHAR2(60);
-- SQL¹®ÀÛ¼º
w_sql_data := 'UPDATE TEST_CSV_TABLE'
|| ' SET '
|| 'OUTPUT_STATUS = ''1'''
|| ' ,OUTPUT_YMD = ' || '''' || i_up_time || ''''
|| ' ,UPDATED_BY = ' || '''' || cn_pkg_name || ''''
|| ' WHERE '
|| 'OUTPUT_STATUS = ''0''';
-- log
DBMS_OUTPUT.PUT_LINE('¡¼L140¡½w_sql_data=[' || w_sql_data || ']');
-- Dynamic SQL ½ÇÇà
EXECUTE IMMEDIATE w_sql_data;
/* ½ÇÇà°á°ú °ËÁõ*/
-- °»½Å°á°ú°¡ 0°ÇÀÌ¸é ´ë»ó µ¥ÀÌŸ°¡ ¾øÀ½À¸·Î ¿¡·¯
IF SQL%ROWCOUNT = 0 THEN
-- log
DBMS_OUTPUT.PUT_LINE('SQL ROWCOUNT :' || SQL%ROWCOUNT);
-- out ÆĶó¸ÞÅÍ¿¡ ÇØ´ç ¿¡·¯ÄÚµå ¼³Á¤
w_out := 'XXX';
-- ¿¡·¯ ó¸®
RAISE e_not_exist_Recode;
ELSE
DBMS_OUTPUT.PUT_LINE('SQL ROWCOUNT :' || SQL%ROWCOUNT);
-- out ÆĶó¸ÞÅÍ¿¡ Á¤»óó¸® Á¾·á ¼³Á¤
w_out := 'OOO';
END IF;
-------------------------------------------------------------------------------------
¸¸¾à ¾î¶² ƯÁ¤ Ä÷³ÀÇ °»½Å¿©ºÎ¸¦ È®ÀÎÇÏ°í ½Í´Ù¸é
<Sample 2>--------------------------------------------------------------------------
-- SQL¹®ÀÛ¼º
w_sql_data := 'UPDATE TEST_CSV_TABLE'
|| ' SET '
|| 'OUTPUT_STATUS = ''1'''
|| ' ,OUTPUT_YMD = ' || '''' || i_up_time || ''''
|| ' ,UPDATED_BY = ' || '''' || cn_pkg_name || ''''
|| ' WHERE '
|| 'OUTPUT_STATUS = ''0'''
|| ' RETURNING OUTPUT_STATUS INTO :w_update_flag';
-- log
DBMS_OUTPUT.PUT_LINE('¡¼L140¡½w_sql_data=[' || w_sql_data || ']');
-- Dynamic SQL ½ÇÇà
EXECUTE IMMEDIATE w_sql_data
RETURNING INTO w_update_flag;
¿©±â¼ "OUTPUT_STATUS" ¶ó´Â Ä÷³ÀÌ °»½ÅµÇ¾ú´Ù¸é "w_update_flag"¿¡´Â "1"À̶ó´Â ¼ýÀÚ°¡
¹ÝȯµÇ¾î Áý´Ï´Ù. °»½Å´ë»ó µ¥Å¸°¡ ¾øÀ¸¸é(°»½ÅÀÌ ¾ÊµÇ¾ú±â¶§¹®¿¡) "0"ÀÌ ¹ÝȯµË´Ï´Ù.
-------------------------------------------------------------------------------------
¸¸¾à µ¿ÀûÀ¸·Î °»½ÅÇÒ °ªÀÌ º¯°æµÈ´Ù°í ÇÑ´Ù¸é
<Sample 3>--------------------------------------------------------------------------
-- ·çÇÁ¸¦ µ¹¾Æ°¡¸é¼ 󸮰¡ µÇ°ÚÁö¿ä..
w_up_time := ¾îµð¼±°¡ ¾ò¾î¿Â °ªÀ» ¼ÂÆÃ;
w_up_name :=¾îµð¼±°¡ ¾ò¾î¿Â °ªÀ» ¼ÂÆÃ;
-- SQL¹®ÀÛ¼º
w_sql_data := 'UPDATE TEST_CSV_TABLE'
|| ' SET '
|| 'OUTPUT_STATUS = ''1'''
|| ' ,OUTPUT_YMD = :val1'
|| ' ,UPDATED_BY = :val2'
|| ' WHERE '
|| 'OUTPUT_STATUS = ''0''';
-- log
DBMS_OUTPUT.PUT_LINE('¡¼L140¡½w_sql_data=[' || w_sql_data || ']');
-- Dynamic SQL ½ÇÇà
EXECUTE IMMEDIATE w_sql_data
USING w_up_time, w_up_name;
-------------------------------------------------------------------------------------
ÇÁ·Î½ÃÁ® ½ÇÇà½ÃÅ°±â
<Sample 4>--------------------------------------------------------------------------
EXECUTE IMMEDIATE 'BEGIN UPD2_PKG.UPD2_PRG(:a, :b, :c, :d, :e, :f, :g, :h, :i); END;'
USING IN w_data_a,
w_data_b,
w_data_c,
w_data_d,
w_data_e,
w_data_f,
w_data_g,
w_data_h,
OUT w_rtn_cd_i;
IF w_rtn_cd_i = success THEN
- ¼º°øÇßÀ»¶§ÀÇ Ã³¸®
ELSIF w_rtn_cd_i = not_found THEN
- ¸®ÅÏ°ªÀÌ Æ¯Á¤ ¿¡·¯ÀÇ °æ¿ìÀÇ Ã³¸®
ELSE
-- ±âŸ ½Ã½ºÅÛ¿¡·¯ µî
RAISE e_exception;
END IF;
|
|
|
|
|
|