Æ®¸®°Å¿¡ ÀÇÇÑ Java ÇÁ·Î±×·¥ÀÇ ½ÇÇà.
Java ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â ¾÷µ¥ÀÌÆ® Æ®¸®°Å¸¦ ¸¸µé°í ½Í½À´Ï´Ù.
T1
À̸§ÀÌ ÁöÁ¤µÈ Å×À̺í ÀÌ Flag
ÀÖ½À´Ï´Ù. Flag
º¯°æÀÌ ÀÖÀ» ¶§¸¶´Ù Java ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â Æ®¸®°Å¸¦ ½ÇÇàÇÏ·Á°íÇÕ´Ï´Ù.
ÀÌ°ÍÀÌ °¡´ÉÇÑ°¡?
³×, MySQL »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ( MySQL 5.5 FAQ : Æ®¸®°Å ÂüÁ¶ )¸¦ »ç¿ëÇÏ°í lib_mysqludf_sys¸¦ ¼³Ä¡ÇϽʽÿÀ
±×·± ´ÙÀ½, ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°ÀÌ sys_exec¸¦ È£ÃâÇÏ´Â ÀÚü Æ®¸®°Å¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
delimiter |
CREATE TRIGGER testtrigger BEFORE UPDATE ON T1
FOR EACH ROW BEGIN
DECLARE result int(10);
IF NEW.Flag <> OLD.Flag THEN
SET result = sys_exec('/path/to/javabin -jar your.jar');
-- other kind of works and checks...
END IF;
END;
|
˼ result
¿ÜºÎ ÇÁ·Î±×·¥ÀÇ Á¾·á Äڵ带 Æ÷ÇÔ
ÀÌ ¶óÀ̺귯¸®¿¡´Â ´Ù¸¥ À¯¿ëÇÑ ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù.
- sys_eval : ÀÓÀÇÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ°í ±× °á°ú¸¦ ¸®ÅÏÇÕ´Ï´Ù.
- sys_get : ȯ°æ º¯¼öÀÇ °ªÀ» ¾ò´Â´Ù.
- sys_set : ȯ°æ º¯¼ö¸¦ »ý¼ºÇϰųª ±âÁ¸ ȯ°æ º¯¼öÀÇ °ªÀ» ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù.
- sys_exec : ÀÓÀÇÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ°í Á¾·á Äڵ带 ¹ÝȯÇÕ´Ï´Ù.
¿©±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸
dev env¿¡¼ ½ÃµµÇغ¸°í ...
ÀÌ ±â´ÉÀÌ ÇÊ¿äÇÑÁö ¿©ºÎ¸¦ °áÁ¤ÇÒ ¶§ÁÖÀÇÇϽʽÿÀ . UDF´Â ¸ðµç µ¥ÀÌÅͺ£À̽º »ç¿ëÀÚ°¡ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç EXECUTE Ư±ÇÀ» ºÎ¿© ÇÒ ¼ö ¾ø½À´Ï´Ù. Ä¿¸Çµå ½ºÆ®¸µÀÌ Àü´Þ
sys_exec
µÉ ¶§ ¸ðµç °ÍÀ» °ÅÀÇ ÇÒ ¼ö Àֱ⠶§¹®¿¡ÀÌ ÇÔ¼ö¸¦ µå·¯³»´Â °ÍÀº ¸Å¿ì À§Çè ÇÕ´Ï´Ù.
ÇÏÁö¸¸ ¾î·µç, ³ª´Â Remus RusanuÀÇ Á¦¾È¿¡ µ¿ÀÇÇÑ´Ù.
³ª´ÂÀÌ Æ÷½ºÆ®°¡ ²Ï ¿À·¡µÇ¾ú°í À¯°¨ ½º·´Áö¸¸ ÃÖ±Ù¿¡ °°Àº ¿ä±¸ Á¶°ÇÀ» °¡Áö°í ÀÖ¾ú±â ¶§¹®¿¡ JNI¸¦ »ç¿ëÇÏ´Â MySQL UDF¸¦ ¸¸µé¾î¼ MySQL Æ®¸®°Å¿¡¼ ÀÚ¹Ù Äڵ带 È£ÃâÇß´Ù. ºñ½ÁÇÑ ¹Ì·¡ ¿äû¿¡ ´ëÇÑ ÂüÁ¶·Î °Ô½ÃÇÏ°í ÀÖ½À´Ï´Ù. ³ª´Â bitbucket¿¡¼ Äڵ带 üũÇß´Ù. ´ç½ÅÀº ¿©±â¿¡¼ ´Ù¿î·Îµå ÇÒ ¼ö ÀÖ½À´Ï´Ù :
MySQLUDFJavaLauncher ±×¸®°í ÀÌ°÷Àº Áöħ ¸µÅ© ÀÔ´Ï´Ù.
¾Æ¸¶ ÀÌ°ÍÀº ´Ù¸¥ »ç¶÷µéÀ» µµ¿ï °ÍÀÔ´Ï´Ù.