使用IBM DB2例程简化迁移的步骤(四)

日期: 2008-07-28 作者:Anna 来源:TechTarget中国 英文

  清单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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐