IBM Books

Net.Data ÂüÁ¶¼­

FUNCTION ºí·Ï

¸ñÀû

FUNCTION ºí·ÏÀº Net.Data ¸ÅÅ©·Î·ÎºÎÅÍ È£ÃâµÉ ¼ö ÀÖ´Â ¼­ºê·çƾÀ» Á¤ÀÇÇÕ´Ï´Ù. FUNCTION ºí·Ï³»ÀÇ ½ÇÇà°¡´É ¸í·É¹®Àº ¾ð¾î ȯ°æ¿¡¼­ Á÷Á¢ ÇØ¼®µÇ´Â ¾ð¾î ¸í·É¹®À̰ųª ¿ÜºÎ ÇÁ·Î±×·¥¿¡ ´ëÇÑ È£ÃâÀ» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.

ÇÔ¼ö Á¤ÀÇ ³»¿¡¼­ EXEC ¸í·É¹®À̳ª ºí·ÏÀ» »ç¿ëÇÒ °æ¿ì, FUNCTION ºí·Ï¿¡´Â ½ÇÇà°¡´É ¸í·É¹®¸¸ÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ½ÇÇà°¡´É ¸í·É¹®À» ¾ð¾î ȯ°æÀ¸·Î Àü¼ÛÇϱâ Àü¿¡, EXEC ¸í·É¹®³»ÀÇ ÇÁ·Î±×·¥ÀÇ ÆÄÀϸíÀÌ ÃʱâÈ­ ÆÄÀϳ»ÀÇ EXEC_PATH ±¸¼º ¸í·É¹®¿¡ ÀÇÇØ ÆÇº°µÉ °æ·Î¸í¿¡ Ãß°¡µÇ¾î¾ß ÇÕ´Ï´Ù. °á°ú ¹®ÀÚ¿­Àº ½ÇÇàµÉ ¾ð¾î ȯ°æÀ¸·Î Àü¼ÛµË´Ï´Ù.

¾ð¾î ȯ°æÀÌ EXEC ¸í·É¹®À» ó¸®Çϴµ¥ »ç¿ëÇÏ´Â ¹æ¹ýÀº ƯÁ¤ ¾ð¾î ȯ°æ¿¡ µû¶ó ´Ù¸¨´Ï´Ù. REXX, System ¹× Perl ¾ð¾î ȯ°æ¿¡¼­¸¸ EXEC ¸í·É¹®À» Áö¿øÇÕ´Ï´Ù.

±¸¹®

>>-%function--(--lang_env--)--function_name--| parameter definition |-->

   +-;--------------------------------------------+
>--+-| returns spec |--{--| function body |---%}--+------------><

¸Å°³º¯¼ö Á¤ÀÇ

|--(--+----------------------+--)------------------------------|
      |  +-,--------------+  |
      |  V                |  |
      +---+-------+-name--+--+
          |-IN----|
          |-OUT---|
          +-INOUT-+

¸®ÅØ ½ºÆå

|--+----------------------+------------------------------------|
   +-RETURNS--(--name--)--+

ÇÔ¼ö º»¹®

-+------------------------+----------------------------------->
   | +--------------------+ |
   | V                    | |
   |--language statement--+-|
   +-exec block-------------+

>--+----------------------------------+------------------------|
   |-report block--+----------------+-|
   |               +-message block--+ |
   +-message block--+---------------+-+
                    +-report block--+

¸Å°³º¯¼ö

%function

Net.Data ¸ÅÅ©·Î·ÎºÎÅÍ È£ÃâµÉ ¼ö ÀÖ´Â ¼­ºê·çƾÀ» ÁöÁ¤Çϴ Ű¿öµå. FUNCTION ºí·Ï³»ÀÇ ½ÇÇà°¡´É ¸í·É¹®Àº ¾ð¾î ȯ°æ¿¡¼­ Á÷Á¢ ÇØ¼®µÇ´Â ¾ð¾î ¸í·É¹®À» Æ÷ÇÔÇϰųª ¿ÜºÎ ÇÁ·Î±×·¥¿¡ ´ëÇÑ È£ÃâÀ» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.

lang_env

ÇÔ¼ö Á¤ÀǸ¦ ±âÃÊ·Î ÇÑ ¾ð¾î ȯ°æ. ÀÚ¼¼ÇÑ Á¤º¸´Â Net.Data ¾ð¾î ȯ°æ ¾È³»¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

function_name

Á¤ÀÇÁßÀÎ ÇÔ¼öÀÇ À̸§. ¾ËÆÄºª ¹®ÀÚ ¶Ç´Â ¹ØÁÙ·Î ½ÃÀÛÇÏ´Â ¾ËÆÄºª ¹®ÀÚ ¶Ç´Â ¼ýÀÚ ¹®ÀÚ¿­·Î, ¾ËÆÄºª ¹®ÀÚ, ¼ýÀÚ ¶Ç´Â ¹ØÁÙ·Î ÀÌ·ç¾îÁø ¸ðµç Á¶ÇÕÀÌ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù.

name

¾ËÆÄºª ¹®ÀÚ ¶Ç´Â ¹ØÁÙ·Î ½ÃÀÛÇÏ´Â ¾ËÆÄºª ¹®ÀÚ ¶Ç´Â ¼ýÀÚ ¹®ÀÚ¿­·Î, ¾ËÆÄºª ¹®ÀÚ, ¼ýÀÚ ¶Ç´Â ¹ØÁÙ·Î ÀÌ·ç¾îÁø ¸ðµç Á¶ÇÕÀÌ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù.

¸Å°³º¯¼ö Á¤ÀÇ:

IN

Ű¿öµå. ÀÚ¼¼ÇÑ Á¤º¸´Â Net.Data ÇÁ·Î±×·¡¹Ö ¾È³»¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

OUT

Ű¿öµå. ÀÚ¼¼ÇÑ Á¤º¸´Â Net.Data ÇÁ·Î±×·¡¹Ö ¾È³»¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

INOUT

Ű¿öµå. ÀÚ¼¼ÇÑ Á¤º¸´Â Net.Data ÇÁ·Î±×·¡¹Ö ¾È³»¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

¸®ÅÏ ½ºÆå:

RETURNS

Ű¿öµå. ÀÚ¼¼ÇÑ Á¤º¸´Â Net.Data ÇÁ·Î±×·¡¹Ö ¾È³»¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

ÇÔ¼ö º»¹®:

language statement

ÇÔ¼ö Á¤ÀÇ¿¡ ÁöÁ¤µÈ ¾ð¾î ȯ°æ(¿¹:REXX, SQL, or Perl)À¸·ÎºÎÅÍ ±¸¹®ÀûÀ¸·Î À¯È¿ÇÑ ¸í·É¹®. ±¸¹® ¹× »ç¿ë¹ý¿¡ ´ëÇØ¼­´Â »ç¿ëÁßÀÎ ¾ð¾î¿¡ ´ëÇÑ ¾ð¾î ÂüÁ¶¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

exec block

EXEC ¸í·É¹®. º¯¼ö°¡ ÂüÁ¶µÇ°Å³ª ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ½ÇÇàµÇ´Â ¿ÜºÎ ÇÁ·Î±×·¥ÀÇ À̸§. ±¸¹® ¹× ¿¹Á¦´Â EXEC ºí·Ï ¶Ç´Â ¸í·É¹® À» ÂüÁ¶ÇϽʽÿÀ.

report block

REPORT ºí·Ï. ÇÔ¼ö È£ÃâÀÇ Ãâ·Â¿¡ ´ëÇÑ Æ÷¸ËÆÃ Áöħ. º¸°í¼­¿¡ ¸Ó¸®¸» ¹× ²¿¸®¸» Á¤º¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±¸¹® ¹× ¿¹Á¦´Â REPORT ºí·Ï À» ÂüÁ¶ÇϽʽÿÀ.

message block

MESSAGE ºí·Ï. ¸®ÅÏ ÄÚµå ¼¼Æ®, ¿¬°üµÈ ¸Þ¼¼Áö, ÇÔ¼ö È£ÃâÀÌ ¸®Å쵃 ¶§ Net.Data°¡ ÃëÇÏ´Â Á¶Ä¡. ±¸¹® ¹× ¿¹Á¦´Â Missing value À» ÂüÁ¶ÇϽʽÿÀ.

ÄÁÅØ½ºÆ®

Net.Data ¸ÅÅ©·Î ¼±¾ðºÎÀÇ ºí·Ï ¹× ¸í·É¹®ÀÇ ¿ÜºÎ¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

Á¦ÇÑ»çÇ×

´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿¹

´ÙÀ½ ¿¹Á¦´Â ÀϹÝÀûÀÎ·Î½á ¸ðµç ¾ð¾î ȯ°æ¿¡ Àû¿ëµÇÁö´Â ¾Ê½À´Ï´Ù. ƯÁ¤ ¾ð¾î ȯ°æÀ» °¡Áø FUNCTION ºí·Ï »ç¿ë¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ À庸´Â Net.Data ¾ð¾î ȯ°æ ¾È³»¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.

¿¹Á¦ 1: REXX ºÎ¼Ó ¹®ÀÚ¿­ ÇÔ¼ö.

%DEFINE lstring = "longstring"
%FUNCTION(DTW_REXX) substring(IN x, y, z) RETURNS(s) {
  s = substr("$(x)", $(y), $(z));
%}
%DEFINE a = {@substring(lstring, "1", "4")%} %{ assigns "long" to a %}

a°¡ Æò°¡µÇ¸é, @substring ÇÔ¼ö È£ÃâÀÌ ¹ß°ßµÇ¸ç ºÎ¼Ó ¹®ÀÚ¿­ FUNCTION ºí·ÏÀÌ ½ÇÇàµË´Ï´Ù. º¯¼ö°¡ FUNCTION ºí·Ï³»ÀÇ ½ÇÇà°¡´É ¸í·É¹®À¸·Î ´ëüµÈ ÈÄ, ¿ø¹® ¹®ÀÚ¿­

s = substr("longstring", 1, 4)

°¡ REXX ÇØ¼®±â·Î Àü´ÞµÇ¾î ½ÇÇàµË´Ï´Ù. RETURNS ÀýÀÌ ÁöÁ¤µÇ¾ú±â ¶§¹®¿¡, a Æò°¡¿¡¼­ @substring ÇÔ¼ö È£ÃâÀÇ °ªÀÌ sÀÇ °ªÀÎ "long"À¸·Î ´ëüµË´Ï´Ù.

¿¹Á¦ 2: ¿ÜºÎ REXX ÇÁ·Î±×·¥ÀÇ È£Ãâ.

EXEC ¸í·É¹®Àº REXX ¾ð¾î ȯ°æ¿¡ REXX ÇØ¼®±â°¡ ¿ÜºÎ REXX ÇÁ·Î±×·¥ÀÎ mypgm.cmd À» ½ÇÇàÇϵµ·Ï Áö½ÃÇÕ´Ï´Ù. REXX ¾ð¾î ȯ°æÀº Á÷Á¢ Net.Data º¯¼ö¿Í ÇÔ²² REXX ÇÁ·Î±×·¥À» °øÀ¯ÇÒ ¼ö Àֱ⠶§¹®¿¡, mypgm.cmd¸¦ ½ÇÇàÇϱ⿡ ¾Õ¼­ REXX º¯¼ö a , b, c¿¡ Net.Data º¯¼ö w,x¹× y¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Mypgm.cmdÀº REXX¹®³»¿¡¼­ Á÷Á¢ º¯¼ö a,b,c¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¥ÀÌ Á¾·áÇϸé, REXX º¯¼ö a,b ¹× d °¡ REXX ÇÁ·Î±×·¥¿¡¼­ °Ë»öµÇ¸ç, ±× °ªÀº Net.Data º¯¼öÀÎ w,x ¹×z¿¡ ÁöÁ¤µË´Ï´Ù. RETURNS ÀýÀÌ my_rexx_pgm %FUNCTION ºí·Ï Á¤Àdz»¿¡ »ç¿ëµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡, @my_rexx_pgm ÇÔ¼ö È£ÃâÀÇ °ªÀº ³Î(NULL) ¹®ÀÚ¿­ ("" )ÀÌ µÇ°Å³ª( ¸®ÅÏ Äڵ尡 0ÀÎ °æ¿ì), REXX ÇÁ·Î±×·¥ ¸®ÅÏ ÄÚµåÀÇ °ªÀÌ µË´Ï´Ù(¸®ÅÏ Äڵ尡 0ÀÌ ¾Æ´Ñ °æ¿ì).

¿¹Á¦ 3: SQL Á¶È¸ ¹× º¸°í¼­.

%FUNCTION(DTW_SQL) query_1(IN x, IN y) {
   SELECT customer.num, order.num, part.num, status
   FROM customer, order, shippingpart
   WHERE customer.num = '$(x)'
      AND customer.ordernumber = order.num
      AND order.num = '$(y)'
      AND order.partnumber = part.num
   %REPORT{
     <P>Here is the status of your order:
     <P>$(NLIST)
     <UL>
     %ROW{
       <LI>$(V1)  $(V2)  $(V3)  $(V4)
     %}
     </UL>
        %}
%}
%DEFINE customer_name="IBM"
%DEFINE customer_order="12345"
%HTML(REPORT) {
  @query_1(customer_name, customer_order)
%}

@query_1 ÇÔ¼ö È£ÃâÀº SELECT ¸í·É¹®¿¡¼­ $(x)´Â "IBM"À¸·Î $(y) ´Â "12345"·Î ´ëüÇÕ´Ï´Ù. SQL ÇÔ¼ö query_1ÀÇ Á¤Àǰ¡ Ãâ·Â Å×ÀÌºí º¯¼ö¸¦ ½Äº°ÇÏÁö ¸øÇϹǷΠ»ý·«½Ã Å×À̺íÀÌ »ç¿ëµË´Ï´Ù (ÀÚ¼¼ÇÑ ³»¿ëÀº TABLE º¯¼ö ºÒ·ÏÀ» ÂüÁ¶ÇϽʽÿÀ). REPORT ºí·Ï¿¡¼­ ÂüÁ¶µÇ´Â NLIST ¹× Vi º¯¼ö´Â »ý·«½Ã Å×À̺í Á¤ÀÇ¿¡ ÀÇÇØ Á¤Àǵ˴ϴÙ. REPORT ºí·Ï¿¡ ÀÇÇØ ÀÛ¼ºµÈ º¸°í¼­´Â query_1 ÇÔ¼ö°¡ È£ÃâµÈ Ãâ·Â HTML ¿¡ ³õÀÌ°Ô µË´Ï´Ù.

¿¹Á¦ 4: Perl ½ºÅ©¸³Æ®¸¦ ¼öÇàÇϱâ À§ÇÑ ½Ã½ºÅÛ È£Ãâ.

System ¾ð¾î ȯ°æÀº FUNCTION ºí·Ï³»ÀÇ ½ÇÇà°¡´É ¸í·É¹®µéÀ» C ¾ð¾î system() ÇÔ¼ö È£ÃâÀ» ÅëÇØ ¿î¿ë ½Ã½ºÅÛÀ¸·Î Àü´ÞÇÏ¿© ÇØ¼®ÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀº REXX ¾ð¾î ȯ°æ¿¡¼­ ó·³ Net.Data º¯¼ö°¡ Á÷Á¢ ½ÇÇà°¡´É ¸í·É¹®À¸·Î Àü´ÞµÇ°Å³ª °Ë»öµÇ´Â °ÍÀ» Çã¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î, System ¾ð¾î ȯ°æ¿¡¼­´Â ´ÙÀ½¿¡ ¼³¸íÇÑ ¹æ¹ýÀ¸·Î º¯¼ö¸¦ Àü´ÞÇÏ°í °Ë»öÇÕ´Ï´Ù.

@today ÇÔ¼ö È£ÃâÀÌ ¹ß°ßµÇ¸é, Net.Data´Â ½ÇÇà°¡´É ¸í·É¹®¿¡¼­ º¯¼ö ´ëü¸¦ ¼öÇàÇÕ´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼­´Â ½ÇÇà°¡´É ¸í·É¹®¿¡ Net.Data º¯¼ö°¡ ¾øÀ¸¹Ç·Î, ¾î¶°ÇÑ º¯¼ö ´ëüµµ ¼öÇàµÇÁö ¾Ê½À´Ï´Ù. ½ÇÇà°¡´É ¸í·É¹®°ú ¸Å°³º¯¼ö°¡ System ¾ð¾î ȯ°æÀ¸·Î Àü´ÞµÇ¸é, ¾ð¾î ȯ°æÀº ¸í¸íµÈ ÆÄÀÌÇÁ¸¦ ÀÛ¼ºÇϰí ȯ°æ º¯¼ö DTWPIPE¸¦ ÆÄÀÌÇÁ À̸§À¸·Î ¼³Á¤ÇÕ´Ï´Ù.

±×·± ´ÙÀ½, ¿ÜºÎ ÇÁ·Î±×·¥ÀÌ C system() ÇÔ¼ö È£ÃâÀ» »ç¿ëÇÏ¿© È£ÃâµË´Ï´Ù. ¿ÜºÎ ÇÁ·Î±×·¥Àº ¾²±â Àü¿ëÀ¸·Î ÆÄÀÌÇÁ¸¦ ¿­¾î Ç¥ÁØ ½ºÆ®¸² ÆÄÀÏ¿¡¼­ ó·³ ÆÄÀÌÇÁ¿¡ ±â·ÏÀ» ÇÕ´Ï´Ù. CGI ¸ðµå¿¡¼­ Net.Data¸¦ »ç¿ëÇÒ °æ¿ì, HTML Ãâ·ÂÀº ´ë½Å STDOUT¿¡ ±â·ÏµË´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼­, ½Ã½ºÅÛ ³¯Â¥ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº FUNCTION ºí·ÏÀÇ RETURNS Àý¿¡¼­ ½Äº°µÇ´Â º¯¼öÀÎ result¿¡ ÁöÁ¤µË´Ï´Ù. result º¯¼öÀÇ °ªÀº HTML ºí·Ï³»ÀÇ @today() ÇÔ¼ö È£ÃâÀ» ´ëüÇÕ´Ï´Ù.

¿¹Á¦ 5: Perl ¾ð¾î ȯ°æ.

%FUNCTION(DTW_PERL) today() RETURNS(result) {
  $date = `date`;
  chop $date;
  open(DTW, "> $ENV{DTWPIPE}") || die "Could not open: $!";
  print DTW "result = \"$date\"\n";
%}
%HTML(INPUT) {
  @today()
%}

EXEC ¸í·É¹®ÀÌ »ç¿ëµÇ´Â ¹æ¹ýÀ» º¸·Á¸é ÀÌ ¿¹Á¦¸¦ ¿¹Á¦ 4¿Í ºñ±³ÇØ º¸½Ê½Ã¿À. ¿¹Á¦ 4¿¡¼­, System ¾ð¾î ȯ°æÀº Perl ÇÁ·Î±×·¥À» ÇØ¼®ÇÏ´Â ¹æ¹ýÀº ¾ËÁö ¸øÇÏÁö¸¸ ¿ÜºÎ ÇÁ·Î±×·¥À» È£ÃâÇÏ´Â ¹æ¹ýÀº ¾Ë°í ÀÖ½À´Ï´Ù. EXEC ¸í·É¹®Àº perlÀ̶ó°í ÇÏ´Â ÇÁ·Î±×·¥À» ¿ÜºÎ ÇÁ·Î±×·¥À¸·Î È£ÃâÇϵµ·Ï Áö½ÃÇÕ´Ï´Ù. ½ÇÁ¦ Perl ¾ð¾î ¸í·É¹®Àº ¿ÜºÎ Perl ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÇØ¼®µË´Ï´Ù. ¿¹Á¦ 5 ¿¡´Â Perl ¾ð¾î ȯ°æÀÌ Á÷Á¢ Perl ¾ð¾î ¸í·É¹®À» ÇØ¼®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î EXEC ¸í·É¹®ÀÌ ¾ø½À´Ï´Ù.


[ ÆäÀÌÁöÀÇ ¸Ç À§ | ÀÌÀü ÆäÀÌÁö | ´ÙÀ½ ÆäÀÌÁö | ¸ñÂ÷ | »öÀÎ ]