清单6.测试函数create_PROCEDURE( )
下面这个例子测试演示了从触发器调用包含一个参数的存储过程。
在该示例中,我们创建t1和t2这两个表,带有一个输入参数(p)的过程(abc)以及一个触发器(ins)。在执行触发器时,它将调用该过程。然后,过程将会将num列的新值(NEW.coll)插入到表t1中。这可以通过以下操作来测试:在表t2上执行插入后对t1发出select来检验该表内容 —— 进而检验该过程是否成功执行。
create table t1 ( col1 int) DB20000I The SQL command completed successfully. create table t2 ( col1 int ) DB20000I The SQL command completed successfully. create procedure abc(in p int) begin insert into t1 values(p); end DB20000I The SQL command completed successfully. create trigger ins after insert on t2 referencing NEW as new for EACH ROW MODE DB2SQL BEGIN ATOMIC values ( call_procedure(’DB2INST1.ABC’, char(new.col1 * 2), ’SAMPLE’, ’DB2INST1’, ’db2inst1’) ); END DB20000I The SQL command completed successfully. insert into t2 values 20 DB20000I The SQL command completed successfully. /* validate that the trigger has fired – it should update t1 */ select * from t1 COL1 ———– 40 1 record(s) selected. |
下一个例子演示了在UDF中调用包含了两个参数的存储过程。在该例中,我们创建表( c ),带有两个输入参数的存储过程( abc )以及带有两个参数(parm1,parm2)的 UDF( udf_withcall )。当执行该UDF时,它将调用存储过程,然后,该存储过程会将由UDF传递给它的值插入表c。对表c进行select将验证表c的内容以及存储过程是否执行成功。可以在“下载”小节中找到该脚本( udf_calls_proc.db2)的源代码。
create table c ( a int check (a <> 8), a1 int ) DB20000I The SQL command completed successfully. create procedure abc(in p int, in p2 int) begin insert into c values(p,p2); end DB20000I The SQL command completed successfully. create function udf_withcall (parm1 int, parm2 int) returns int Language SQL not deterministic external action return call_procedure(’DB2INST1.ABC’, char(parm1) ||’,’|| char(parm2), ’SAMPLE’, ’DB2INST1’, ’db2inst1’)) DB20000I The SQL command completed successfully. select udf_withcall(30,40) from sysibm.sysdummy1 1 ———– 0 1 record(s) selected. /* verify that the UDF has called the procedure and updated the table */ select * from c A A1 ———– ———– 10 20 30 40 2 record(s) selected. |
构建例程
为了构建C例程(UDF 或 存储过程),必须首先对其进行预编译、编译以及链接。该过程可通过批文件bldrtn (UNIX/LINUX 上)或 bldrtn.bat (Windows 上)自动完成,该文件包含在随DB2一同安装的样本中。可以在UNIX/LINUX上的/sqllib/samples/c目录或Windows上的
bldrtn [dbname userid password] |
如果未提供dbname,那么批文件会将之默认为SAMPLE ,而userid和password则被默认为当前会话的用户ID和口令。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
数据库产品巡礼:IBM DB2概览
IBM DB2关系型数据库管理系统提供了支持多平台系统的关键技术,它具备较高的可用性和良好的性能。
-
IBM加入Spark社区 计划培养百万数据科学家
IBM近日宣布,将大力推进Apache Spark项目,并计划培养超过100万名Spark数据科学家和数据工程师。
-
IBM成立物联网部门旨在整合未用数据
IBM准备在未来四年投资30亿美元成立一个专门的物联网(IoT)部门,并由此建立一个基于云的开放平台来帮助客户进行更好的数据整合。
-
ODP项目能否成为Hadoop助推器?
开放数据平台联盟的成立旨在为了推动Hadoop的标准化,但项目能否最终成功,或能否项向着承诺的方向发展,还有很多不确定因素。