Net.Data´Â »õ ¾ð¾î ¹× µ¥ÀÌŸº£À̽º ÀÎÅÍÆäÀ̽º°¡ 'Ç÷¯±× °¡´É' ¹æ½ÄÀ¸·Î Ãß°¡µÉ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù. ÀÌµé ¾ð¾î ȯ°æÀº ¼ºñ½º ÇÁ·Î±×·¥À¸·Î¼ ¾×¼¼½ºµË´Ï´Ù. ¼ºñ½º ÇÁ·Î±×·¥¸íÀº Net.Data Ãʱ⼳Á¤ ÆÄÀÏ¿¡ ±¸¼ºµÇ°í, ¾ð¾î ȯ°æ¸í°ú ¿¬°áµË´Ï´Ù. °¢ ¾ð¾î ȯ°æÀº Net.Data¿¡ ÀÇÇØ Á¤ÀǵǴ ǥÁØ ÀÎÅÍÆäÀ̽º ÁýÇÕÀ» Áö¿øÇØ¾ß ÇÕ´Ï´Ù.
OS/400¿ë Net.Data´Â ´ÙÀ½°ú °°Àº ¾ð¾î ȯ°æÀ» Áö¿øÇÕ´Ï´Ù.
´ÙÀ½ Àý¿¡¼´Â ¾Õ¿¡¼ ¾ð±ÞÇÑ ¾ð¾î ȯ°æ¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.
REXX ¾ð¾î ȯ°æÀº Net.Data ¸ÅÅ©·ÎÀÇ FUNCTION ºí·Ï¿¡ ÁöÁ¤µÈ ³»ºÎ REXX ÇÁ·Î±×·¥À» ÇØ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶Ç´Â, º°µµ ÆÄÀÏ¿¡ ÀúÀåµÈ ¿ÜºÎ REXX ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. REXX ¾ð¾î ȯ°æÀÇ Æ¯Â¡Àº ´ÙÀ½°ú °°½À´Ï´Ù.
REXX ÇÁ·Î±×·¥Àº rEXX ½ºÅÛ º¯¼ö·Î¼ Net.Data ¸ÅÅ©·Î Å×ÀÌºí ¸Å°³º¯¼ö °ª¿¡ ¾×¼¼½ºÇÏ°Ô µË´Ï´Ù. REXX ÇÁ·Î±×·¥¿¡°Ô, T Å×ÀÌºí¿¡ ´ëÇÑ Ä÷³ Ç¥Á¦´Â T_N.iÀ̰í, ÇÊµå °ªÀº T_V.i.jÀÔ´Ï´Ù.
¿ÜºÎ REXX ÇÁ·Î±×·¥ È£ÃâÀº, ´ÙÀ½°ú °°Àº Çü½ÄÀÇ ¸í·É¹®¿¡ ÀÇÇØ FUNCTION ºí·Ï¿¡¼ ½Äº°µË´Ï´Ù.
%EXEC{ REXX-file-name Yoptional parameters" %}
´ÙÀ½Àº ³»ºÎ REXX ÇÁ·Î±×·¥°ú ¿ÜºÎ REXX ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÂüÁ¶ ¸ðµÎ°¡ ÀÖ´Â ¸ÅÅ©·Î(REXXM)ÀÇ °£´ÜÇÑ ¿¹ÀÔ´Ï´Ù.
%define a = "3"
%define b = "0"
%function(DTW_REXX) func1(IN inp1, OUT outp1){
%EXEC{ /QSYS.LIB/REXX.LIB/REXXSRC.FILE/TREXX.MBR %}
%}
%function(DTW_REXX) func2(IN inp1, OUT outp1){
outp1 = 2*inp1
%}
%HTML(REPORT){
@func1(a, b)
b=$(b)
@func2(a, b)
b=$(b)
%}
ÀÌ ¿¹¿¡¼, @func1ÀÇ °á°ú´Â REXX ÇÁ·Î±×·¥ TREXX.MBRÀÌ REXX ÇØ¼®±â¿¡ ÀÇÇØ ÇØ¼®µÇ°í, @func2 °á°ú´Â REXX ÇØ¼®±â¿¡¼ "outp1 = 2*inp1" ¸í·É¹®À» ÇØ¼®ÇÕ´Ï´Ù. µÎ °æ¿ì ¸ðµÎ, REXX º¯¼ö Ç®ÀÌ ¼³Á¤µÇ¾î REXX ÇØ¼®±â´Â "a" ¹× "b" º¯¼ö¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ½À´Ï´Ù. @func2°¡ ¿Ï·áµÈ ÈÄ "b"´Â "6"À¸·Î ¼³Á¤µË´Ï´Ù(REXX ÇÁ·Î±×·¥ TREXX.MBRÀÌ "a"¸¦ ¼öÁ¤ÇÏÁö ¾Ê¾Ò´Ù°í ÀüÁ¦).
À̰ÍÀº ´ÙÀ½À» ÀüÁ¦·Î ÇÏ´Â, ¸ÅÅ©·Î¸¦ ÂüÁ¶ÇÏ´Â ¿¹Á¦ URLÀÔ´Ï´Ù.
http://hostname/cgi-bin/db2www/WWW/macro/REXXM/report
Net.Data Ãʱ⼳Á¤ ÆÄÀÏÀ» ÀÛ¼ºÇÏÁö ¾Ê±â·Î ÇÑ °æ¿ì, »ý·«½Ã °ªÀ¸·Î REXX ¾ð¾î ȯ°æÀÌ ÀÛµ¿ °¡´ÉÇÕ´Ï´Ù. ±×·¯³ª, Ãʱ⼳Á¤ ÆÄÀÏÀ» ÀÛ¼ºÇß°í REXX ¾ð¾î ȯ°æÀ» »ç¿ëÇÏ·Á´Â °æ¿ì, ´ÙÀ½°ú °°Àº ±¸¼º ¸í·É¹®ÀÌ Ãʱ⼳Á¤ ÆÄÀÏ¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ENVIRONMENT(DTW_REXX) /QSYS.LIB/QTCP.LIB/QTMHREXX.SRVPGM ( )
SQL ¾ð¾î ȯ°æÀº DB2¸¦ »ç¿ëÇÏ¿© SQL¹®À» ½ÇÇàÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. SQL ¾ð¾î ȯ°æÀÇ Æ¯Â¡Àº ´ÙÀ½°ú °°½À´Ï´Ù.
DTW_SQL_NAMING_MODE = SYSTEM_NAMING
¶ÇÇÑ,DTW_SQL_NAMING_MODE¸¦ SQL_NAMINGÀ¸·Î ¼³Á¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ´Â SQL ¸í¸í ¸ðµåÀÇ »ý·«½Ã °ª°ú °°½À´Ï´Ù.
¿ø°Ý AS/400¿¡ ¿¬°áÀ» ÇÏ´Â °æ¿ì, SQL Call Level Interface´Â QSQCLIPKG¶ó´Â À̸§À¸·Î QGPL ¶óÀ̺귯¸®¿¡¼ *SQLPKG ¿ÀºêÁ§Æ®¸¦ ã½À´Ï´Ù. ÀÖÀ¸¸é »ç¿ëµÇÁö¸¸ ¾øÀ¸¸é ÀÛ¼ºµË´Ï´Ù. ÀÌ SQL ÆÐŰÁö¿¡´Â ±âº» SQL°¡ ¾×¼¼½ºµÇ´Â ¸ðµç ±ÔÄ¢ÀÌ µé¾î ÀÖ½À´Ï´Ù. µû¶ó¼, ù¹øÂ° ¿¬°á ¼Ó¼ºÀº ¸ðµç ÈÄ¼Ó ¿¬°áÀÌ µû¶ó¾ß ÇÏ´Â ±ÔÄ¢À» ¼³Á¤ÇÕ´Ï´Ù. ÀÌµé ¼Ó¼ºÁßÀÇ Çϳª°¡ ¸í¸í ¸ðµåÀÔ´Ï´Ù. ¿ø°Ý AS/400ÀÇ ±âÁ¸ÀÇ QGPL/QSQCLIPKG¿¡¼ ¸í¸í ¸ðµå¿Í Ãæµ¹Çϵµ·Ï DTW_SQL_NAMING_MODE¸¦ ¼³Á¤Çϸé, Net.Data ¸ÅÅ©·Î¿¡ ÀÖ´Â SQL¹® °á°ú´Â -5016À̶ó´Â SQLCODE°¡ µË´Ï´Ù. ÀÌ·¯ÇÑ »óȲÀ» ÇÇÇÏ·Á¸é, ¸í¸í ¸ðµå¸¦ ¼±ÅÃÇϰí À̸¦ °í¼öÇϽʽÿÀ. QGPL/QSQCLIPKG ¿ÀºêÁ§Æ®°¡ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ¸í¸í ¸ðµå¿Í Ãæµ¹ÇÏ´Â °æ¿ì, À̸¦ »èÁ¦ÇÏ°í ´Ù½Ã Net.Data ¿äûÀ» ¹ßÇàÇϽʽÿÀ. »õ·Î¿î QGPL/QSQCLIPKG°¡ ÇÊ¿äÇÑ ¸í¸í ¸ðµå ¿É¼ÇÀ¸·Î ÀÛ¼ºµË´Ï´Ù.
SQL ¾ð¾î ȯ°æÀÌ ¿ø°Ý ½Ã½ºÅÛÀ¸·Î ¿¬°áÀ» ÇÏ´Â °æ¿ì, »ç¿ëÀÚ ID¿Í ¿¬°áÀ» ¿¬°á½Ãŵ´Ï´Ù. ÈÄ¼Ó Net.Data Á¶È¸¿¡¼ »ç¿ëÀÚ ID°¡ ¿¬°á°ú °ü·ÃµÈ »ç¿ëÀÚ ID¿Í ÀÏÄ¡ÇÏÁö ¾Ê´Â °æ¿ì, ¿¬°áÀÌ Á¾·áµÇ°í µ¥ÀÌŸº£À̽º¿¡ ´ëÇÑ »õ·Î¿î ¿¬°áÀÌ ÀÌ·ç¾îÁý´Ï´Ù(ÀÌ´Â Æ®·£Àè¼Ç ¹üÀ§°¡ SINGLEÀÎ °æ¿ì¿¡¸¸ ¹ß»ýÇÕ´Ï´Ù). ¼º´ÉÀÌ ¹®Á¦ÀÎ °æ¿ì, À¥ ¸ÅÅ©·Î ÀÛ¼ºÀÚ´Â ¿ø°Ý µ¥ÀÌŸº£À̽º·Î SQL¹®À» ¹ßÇàÇÒ ¶§ µ¿ÀÏÇÑ »ç¿ëÀÚ ID¸¦ »ç¿ëÇϰųª Çϵå ÄÚµåÈÇØ¾ß ÇÕ´Ï´Ù. ±¹Áö µ¥ÀÌŸº£À̽º ¾×¼¼½ºÀÇ °æ¿ì, »ç¿ëÀÚ ID ¹× ¾ÏÈ£´Â ¹«½ÃµË´Ï´Ù.
´ÙÀ½Àº ´ÜÀÏ SQL ¸í·ÉÀ» ¹ßÇàÇÏ´Â °£´ÜÇÑ ¸ÅÅ©·ÎÀÇ ¿¹(SQLM)ÀÔ´Ï´Ù.
%define DATABASE="HOSTNAME"
%FUNCTION(DTW_SQL) sql1 (){
select * from custinfo.customer
%}
%HTML(REPORT){
@sql1()
%}
¸ÅÅ©·Î¸¦ ÂüÁ¶ÇÏ´Â URLÀº, ¸ÅÅ©·Î ÆÄÀϸí REXXMÀÌ SQLMÀ¸·Î ±³Ã¼µÇ´Â °Í¸¸ »©°í, REXX ¾ð¾î ȯ°æ¿¡ ´ëÇØ Á¦°øµÈ ¿¹Á¦ URL°ú À¯»çÇÕ´Ï´Ù.
Net.Data Ãʱ⼳Á¤ ÆÄÀÏÀ» ÀÛ¼ºÇÏÁö ¾Ê±â·Î ¼±ÅÃÇÑ °æ¿ì, »ý·«½Ã °ªÀ¸·Î SQL ¾ð¾î ȯ°æÀÌ ÀÛµ¿°¡´ÉÇÏ°Ô µË´Ï´Ù. ±×·¯³ª, Ãʱ⼳Á¤ ÆÄÀÏÀ» ÀÛ¼ºÇß°í SQL ¾ð¾î ȯ°æÀ» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì, ´ÙÀ½°ú °°Àº ±¸¼º ¸í·É¹®ÀÌ Ãʱ⼳Á¤ ÆÄÀÏ¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ENVIRONMENT(DTW_SQL) /QSYS.LIB/QTCP.LIB/QTMHSQL.SRVPGM
( IN DATABASE, LOGIN, PASSWORD, TRANSACTION_SCOPE, SHOWSQL, DTW_SET_TOTAL_ROWS,
DB_CASE, OUT DTWTABLE, SQL_CODE, TOTAL_ROWS )
Ãʱ⼳Á¤ ÆÄÀÏ¿¡¼ ÀÌ È¯°æ ¸í·É¹®ÀÇ ÅØ½ºÆ®´Â ¸ðµÎ ÇÑ Çà¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¿©±â¿¡¼´Â ÀÐ±â ÆíÇϵµ·Ï ¿©·¯ ÇàÀ¸·Î ³ª´©¾î Ç¥½ÃÇß½À´Ï´Ù.
À§ ±¸¼º ¸í·É¹®ÀÇ SQL ¾ð¾î ȯ°æ ¸Å°³º¯¼öµéÀº ¾ð¾î È£³ª°æÀ¸·Î Àü´ÞµÇ°í ¾Æ·¡¿Í °°ÀÌ ¼³¸íµË´Ï´Ù.
%DEFINE DATABASE="HOSTNAME"
%DEFINE{ LOGIN="MYUSERID"
PASSWORD="DB2WWW"
%}
%DEFINE TRANSACTION_SCOPE="SINGLE"
%DEFINE SHOWSQL="YES"
%DEFINE DB_CASE="UPPER"
Query completed with SQL code $(SQL_CODE).
SYSTEM ¾ð¾î ȯ°æÀº FUNCTION ºí·ÏÀÇ EXEC ¸í·É¹®¿¡¼ ½Äº°µÇ´Â ¿ÜºÎ ÇÁ·Î±×·¥À¸·ÎÀÇ È£ÃâÀ» Áö¿øÇÕ´Ï´Ù.
SYSTEM ¾ð¾î ȯ°æÀº C ¾ð¾î ½Ã½ºÅÛ() ÇÔ¼ö È£ÃâÀ» »ç¿ëÇÏ¿© ½ÇÇàÀ» À§ÇØ ÁöÁ¤µÈ ÇÁ·Î±×·¥¸í ¹× ¸Å°³º¯¼ö¸¦ ¿î¿ë ½Ã½ºÅÛÀ¸·Î Àü´ÞÇÔÀ¸·Î½á EXEC ¸í·É¹®À» ÇØ¼®ÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀº Net.Data º¯¼ö°¡ REXX ¾ð¾î ȯ°æÀÌ ÇÏ´Â °Íó·³ ½ÇÇà°¡´É ¸í·É¹®À¸·Î Á÷Á¢ Àü´ÞµÇ°Å³ª °Ë»öµÇÁö ¸øÇϵµ·Ï ÇÕ´Ï´Ù. µû¶ó¼, SYSTEM ¾ð¾î ȯ°æÀº ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î º¯¼ö¸¦ Àü´Þ ¹× °Ë»öÇÕ´Ï´Ù.
SYSTEM ¾ð¾î ȯ°æ ÇÁ·Î±×·¥Àº Net.Data¸í¿¡ ÀÇÇØ Net.Data ¸ÅÅ©·Î Å×ÀÌºí ¸Å°³º¯¼ö °ª¿¡ ¾×¼¼½ºÇÕ´Ï´Ù. Å×À̺í T¿¡ ´ëÇÑ Ä÷³ Ç¥Á¦´Â T_N_iÀ̰í, Çʵ尪Àº T_V_i_jÀÔ´Ï´Ù.
SYSTEM ¾ð¾î ȯ°æÀº ½ÇÇà °¡´ÉÇÑ ¸í·É¾î³ª ÇÁ·Î±×·¥À̱⸦ ±â´ëÇÕ´Ï´Ù. QTMHHTP1 »ç¿ëÀÚ ÇÁ·ÎÆÄÀÏ¿¡´Â ½ÇÇà °¡´ÉÇÏ°Ô »ç¿ëÇÏ´Â ÀÚ¿ø ¿Ü¿¡µµ, ½ÇÇà °¡´ÉÀ» ¼öÇàÇÒ ±ÇÇÑÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
´ÙÀ½Àº, ÇÑ Net.Data ¸Å°³º¯¼ö·Î Àü´ÞÇÏ¿© ½ÇÇà °¡´ÉÇÏ°Ô ÇÁ·Î±×·¥À» ÁöÁ¤ÇÏ´Â °£´ÜÇÑ ¸ÅÅ©·ÎÀÇ ¿¹(SYSM)ÀÔ´Ï´Ù.
%define var1 = "OriginalValue"
%FUNCTION(DTW_SYSTEM) test(INOUT parm1){
%EXEC{ /QSYS.LIB/PGM.LIB/TSYS0001.PGM %}
%}
%HTML(REPORT){
<PRE>
Value of var1 before function call: $(var1)
@test(var1)
Value of var1 after function call: $(var1)
</PRE>
%}
¸ÅÅ©·Î¸¦ ÂüÁ¶ÇÏ´Â URLÀº, ¸ÅÅ©·Î ÆÄÀϸí REXXMÀÌ SYSMÀ¸·Î ±³Ã¼µÇ´Â °ÍÀ» Á¦¿ÜÇϰí´Â, REXX ¾ð¾î ȯ°æ¿¡ ÁÖ¾îÁø URL ¿¹Á¦¿Í À¯»çÇÕ´Ï´Ù.
Net.Data Ãʱ⼳Á¤ ÆÄÀÏÀ» ÀÛ¼ºÇÏÁö ¾Ê±â·Î ¼±ÅÃÇÑ °æ¿ì, »ý·«½Ã °ªÀ¸·Î SYSTEM ¾ð¾î ȯ°æÀÌ ÀÛµ¿°¡´ÉÇÏ°Ô µË´Ï´Ù. ±×·¯³ª, Ãʱ⼳Á¤ ÆÄÀÏÀ» ÀÛ¼ºÇß°í SYSTEM ¾ð¾î ȯ°æÀ» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì, ´ÙÀ½°ú °°Àº ±¸¼º ¸í·É¹®ÀÌ Ãʱ⼳Á¤ ÆÄÀÏ¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ENVIRONMENT(DTW_SYSTEM) /QSYS.LIB/QTCP.LIB/QTMHSYS.SRVPGM ( )