大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说Execution of a Java program by a trigger.「终于解决」,希望您对编程的造诣更进一步.
I have a table T1
with a column named Flag
. Whenever Flag
changes, I want to run a trigger that results in an execution of a Java program.
Is this possible?
-
答案
Yes, using the MySQL User-Defined Function (see MySQL 5.5 FAQ: Triggers) and installing the lib_mysqludf_sys
Then, for example, you can write your own trigger calling the sys_exec like this:
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; |
代码100分
The result
contains the exit code of the external program
There are other useful functions in this library:
- sys_eval : executes an arbitrary command, and returns it”s output.
- sys_get : gets the value of an environment variable
- sys_set : create an environment variable, or update the value of an existing environment variable
- sys_exec : executes an arbitrary command, and returns it”s exit code
More info here
Try it on a dev env and…
Be very careful in deciding whether you need this function. UDFs are available to all database users – you cannot grant EXECUTE privileges for them. As the commandstring passed to
sys_exec
can do pretty much everything, exposing the function poses a very real security hazard.
But anyway, I agree with the proposal of Remus Rusanu
创建 09 4月. 13 Cristian Porta
how can i install the lib_mysqludf_sys utility ?? – Ankit Kapoor 09 4月. 13
Take a look into “installation” section here: https://github.com/mysqludf/lib_mysqludf_sys/blob/master/lib_mysqludf_sys.html … but in general read the mysql udf manual – Cristian Porta 09 4月. 13
getting this error —–CREATE FUNCTION sys_exec RETURNS INT SONAME “lib_mysqludf_sys.so”; ERROR 1126 (HY000): Can”t open shared library “lib_mysqludf_sys.so” (errno: 0 /usr/lib/mysql/plugin/lib_mysqludf_sys.so: wrong ELF class: ELFCLASS32) – Ankit Kapoor 10 4月. 13
do you have a 32bit or 64bit operating system? – Cristian Porta 10 4月. 13
its 64 bit ubuntu 0.12… – Ankit Kapoor 10 4月. 13
Try recompiling for 64bit… modify your Makefile “gcc -m64 -fPIC -Wall ….” and “sudo make” – Cristian Porta 10 4月. 13
can you please elaborate more ..i went through this over some sites but cannot figure out how should i proceed.. – Ankit Kapoor 10 4月. 13
About recompiling the mysqludf_sys for 64bit you can look at the answer on your post http://dba.stackexchange.com/questions/39752/how-to-resolve-elfclass32-error-in-mysql-for-udf-lib-mysqludf-sys-so – Cristian Porta 07 10月. 13
no solution has been provided on this http://dba.stackexchange.com/questions/39752/how-to-resolve-elfclass32-error-in-mysql-for-udf-lib-mysqludf-sys-so – Ankit Kapoor 07 10月. 13
Ok, try this: “gcc -m64 -fPIC -Wall -I/path/to/your/mysql/basedir -I. -shared lib_mysqludf_sys.c -o /path/to/save/your/new/lib_mysqludf_sys.so” – Cristian Porta 07 10月. 13
i will reply in a day or two… – Ankit Kapoor 08 10月. 13
@user21546 any news? :) – Cristian Porta 11 11月. 13
not yet !! im out for some days..i need to review it again on this project !! – Ankit Kapoor 11 11月. 13
hi ..m here now..can you please help me here…i dnt know how to install lib_mysqludf_sys…once it done…i will go further – Ankit Kapoor 06 12月. 13
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9211.html