| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 38. PL/Tcl - Tcl ¼ö¼ÓÇü ¾ð¾î | Fast Forward | Next |
PL/Tcl¾ð¾î·Î ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ·Á¸é , ÀÌÇÏÀÇ Ç¥ÁØÀûÀÎ CREATE FUNCTION ±¸¹®À» »ç¿ëÇØ ÁÖ¼¼¿ä.
CREATE FUNCTION funcname ( argument-types ) RETURNS return-type AS $$ # PL/Tcl ÇÔ¼ö º»Ã¼ $$ LANGUAGE pltcl;
PL/TclU¿¡¼µµ, ¾ð¾î¿¡ pltclu¸¦ ÁöÁ¤ÇØ¾ß ÇÏ´Â Á¡ Àܴ̿ °°½À´Ï´Ù.
ÇÔ¼ö º»Ã¼´Â, ´Ü¼øÇÑ ÀÛÀº Tcl ½ºÅ©¸³Æ®ÀÔ´Ï´Ù. ÇÔ¼ö°¡ ºÒ·Á °¬À» ¶§, ÀÎÀÚÀÇ °ªÀº Tcl ½ºÅ©¸³Æ®¿¡ $1 ... $ n ¶ó°í ÇÏ´Â º¯¼ö·Î °Ç³×¹Þ½À´Ï´Ù. °á°ú´Â Åë»ó ´ë·Î return¹®À» »ç¿ëÇØ TclÀÇ ÄÚµå·ÎºÎÅÍ µ¹·ÁÁÖ¾îÁý´Ï´Ù.
¿¹¸¦ µé¸é, 2°³ÀÇ Á¤¼öÀÇ ´õ Å« ÆíÀ» µ¹·ÁÁÖ´Â ÇÔ¼ö´Â ÀÌÇÏ¿Í °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE FUNCTION tcl_max(integer, integer) RETURNS integer AS $$
if {$1 > $2} {return $1}
return $2
$$ LANGUAGE pltcl STRICT;
STRICT±¸¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. À̰Ϳ¡ ÀÇÇØ ÇÁ·Î±×·¡¸Ó´Â, ÀԷ¿¡ NULL°ªÀÌ ÁÖ¾îÁ³À» °æ¿ì¸¦ °ËÅäÇÏ´Â °ÍÀ» »ý·«ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. NULL°ªÀ» °Ç³×¹Þ¾ÒÀ» °æ¿ì, ÇÔ¼ö´Â ÀüÇô ºÒ·Á °¡Áö ¾Ê°í ´ÜÁö NULLÀ̶ó°í ÇÏ´Â °á°ú°¡ ÀÚµ¿ÀûÀ¸·Î µ¹·ÁÁÖ¾îÁý´Ï´Ù.
¾ö¹ÐÇÏÁö ¾ÊÀº ÇÔ¼ö¿¡¼´Â ÀÎÀÚÀÇ ½ÇÁ¦ÀÇ °ªÀÌ NULLÀÎ °æ¿ì, ´ëÀÀÇÏ´Â $
n
º¯¼ö´Â °ø¹®ÀÚ¿·Î ¼³Á¤µË´Ï´Ù.
¾î´À ÀÎÀÚ°¡ NULLÀΰ¡ ¾Æ´Ñ°¡¸¦ °ËÃâÇϱâ À§Çؼ´Â, argisnullÇÔ¼ö¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.
¿¹¸¦ µé¸é, ÀÎÀÚÀÇ ´Ù¸¥ ÇÑÂÊÀÌ NULL°ªÀÌ°í ´Ù¸¥ ÇÑÂÊÀÌ ºñNULL°ªÀÏ °æ¿ì,
NULL°ª ¾Æ´Ñ ºñNULLÀÇ ÀÎÀÚÀÇ ÆíÀ» µ¹·ÁÁÖ´Â tcl_max¸¦ »ý°¢Çϸé ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù.
CREATE FUNCTION tcl_max(integer, integer) RETURNS integer AS $$
if {[argisnull 1]} {
if {[argisnull 2]} { return_null }
return $2
}
if {[argisnull 2]} { return $1 }
if {$1 > $2} {return $1}
return $2
$$ LANGUAGE pltcl;
À§¿¡¼ °¡¸®Å² ´ë·Î, NULL°ªÀ» PL/Tcl ÇÔ¼ö·ÎºÎÅÍ µ¹·ÁÁÖ±â À§Çؼ´Â return_null¸¦ ½ÇÇàÇØ ÁÖ¼¼¿ä. À̰ÍÀº, ÇÔ¼ö°¡ ¾ö¹ÐÇÑÁö¿¡ °ü°è¾øÀÌ, ½ÇÇàÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
º¹ÇÕÇüÀÇ ÀÎÀÚ´Â, Tcl ¹è¿·Î¼ ÇÔ¼ö¿¡°Ô °Ç³×Áý´Ï´Ù. ¹è¿ÀÇ ¿ä¼Ò¸íÀº º¹ÇÕÇüÀÇ ¼Ó¼º¸íÀÔ´Ï´Ù. °Ç³×¹ÞÀº ÇàÀÇ ¼Ó¼ºÀÌ NULL°ªÀÎ °æ¿ì, ±× ¼Ó¼ºÀº ¹è¿³»¿¡´Â ³ªÅ¸³ªÁö ¾Ê½À´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
CREATE TABLE employee (
name text,
salary integer,
age integer
);
CREATE FUNCTION overpaid(employee) RETURNS boolean AS $$
if {200000.0 < $1(salary)} {
return "t"
}
if {$1(age) < 30 && 100000.0 < $1(salary)} {
return "t"
}
return "f"
$$ LANGUAGE pltcl;
ÇöÀç, º¹ÇÕÇüÀÇ ¹Ýȯ°ªÀ» µ¹·ÁÁÖ´Â ±â´ÉÀ̳ª ÁýÇÕÀ» µ¹·ÁÁÖ´Â ±â´ÉÀº Áö¿øµÇ°í ÀÖÁö ¾Ê½À´Ï´Ù.
ÇöÀç PL/Tcl´Â µµ¸ÞÀÎÇüÀ» ¿ÏÀüÇÏ°Ô Áö¿øÇϰí ÀÖ½À´Ï´Ù. µµ¸ÞÀÎÀ» ±× ¹èÈÄ¿¡ ÀÖ´Â ½ºÄ®¶óÇü°ú °°°Ô Ãë±ÞÇÕ´Ï´Ù. À̰ÍÀº, µµ¸ÞÀο¡ °ü·ÃÇÏ´Â Á¦¾àÀÌ ½ÃÇàµÇÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇϰí ÀÖ½À´Ï´Ù. À̰ÍÀº ÇÔ¼öÀÇ ÀÎÀÚ¿¡¼´Â ¹®Á¦ ¾ø½À´Ï´Ù¸¸, PL/TclÇÔ¼ö¸¦ µµ¸ÞÀÎÇüÀ¸·Î µ¹·ÁÁÖµµ·Ï ¼±¾ðÇßÀ» °æ¿ì´Â À§ÇèÇÕ´Ï´Ù.