sqlserver触发器中如何调用外部程序?

sqlserver触发器中如何调用外部程序?,第1张

--调用外部程序或者命令exec xp_cmdshell 'dir c:\'注意不能调用需要用户干预才能继续运行的程序.使用Sqlserver的xp_CmdShell扩展存储过程的一个注意:这个存储过程只能执行Dos控制台程序,其他的Exe程序不能在Sqlserver进程空间执行.但外部程式必须是一个自生灭的程式(即没有消息循环、不需要与用户交互),否则将会进入死循环中。

mysql 通过函数执本地命令、外部程序

昨天接到一个需求,要求在mysql的触发器中执行一个外部程序。

一开始没有什么头绪,后来发现嘿嘿。

id=211

有个叫mysqludf的一个东西,用起来还不错。

不过这个东西仅仅在linux下试了试,效果还行。

步骤如下:

一、解压附件的压缩包之后

如果不想自己编译的话,把lib_mysqludf_sys.so文件放到 mysql的lib/mysql/plugin/

目录下。

二、执行chcon -t texrel_shlib_t mysql/lib/mysql/plugin/lib_mysqludf_sys.so

三、创建函数

DROP FUNCTION IF EXISTS lib_mysqludf_sys_info

DROP FUNCTION IF EXISTS sys_get

DROP FUNCTION IF EXISTS sys_set

DROP FUNCTION IF EXISTS sys_exec

DROP FUNCTION IF EXISTS sys_eval

CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so'

CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so'

CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so'

CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so'

CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so'

四、测试

1、准备sh文件

在linux系统中执行下面的命令

su mysql

mkdir /mysqlUDFtest

cd mysqlUDFtest

vi test.sh

#/bin/sh

date >testlog.txt

chmod +x ./test.sh

2、准备数据库表和触发器

选择一个数据库执行如下命令:

CREATE TABLE test1(a1 INT) type=InnoDB

CREATE TABLE test2(a2 INT) type=InnoDB

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY) type=InnoDB

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

) type=InnoDB

DELIMITER |

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`testref`|

create trigger `test`.`testref` BEFORE INSERT on `test`.`test1`

for each row BEGIN

DECLARE done INT DEFAULT 999

INSERT INTO test2 SET a2 = NEW.a1

DELETE FROM test3 WHERE a3 = NEW.a1

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1

set done = sys_exec("/mysqlUDFtest/test.sh")

IF done != 0 then

INSERT INTO `$amp<amp $gt22.t3`="" (a,b)end="" ifEND

|

外部程序可以自己一直处于运行状态,定时扫描文件,一旦发现文件有数据进来,就开始进行 *** 作,不用从数据库进行触发。

如果非要从数据库触发,这个程序又部署在数据库服务器,可写一个java存储过程,直接调用服务器上的东东。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7839835.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存