浅谈IBM DB2数据库如何迁移问题(4)

http://www.itjxue.com  2015-08-21 22:21  来源:未知  点击次数: 

  通过触发器或用户定义函数调用存储过程的 UDF

  当迁移到 DB2 时,碰到的另一个普遍问题就是其他 RDBMS 可以通过触发器或函数调用存储过程。虽然 DB2 已经承诺在未来版本中包含该功能,但是我们将展示如何使用 DB2 的当前版本来实现该功能,即通过创建一个将对存储过程发出调用的 UDF 来实现。

  清单 5 中展示了用于该目的的用户定义函数 CALL_PROCEDURE 的签名。

  清单 5. 用户定义函数 CALL_PROCEDURE 的签名

  VARCHAR(257) 类型的参数 procedure_name 指定要被调用的存储过程的全限定名 —— 在传递多个参数时,要用逗号进行分隔。该字符串将被粘贴到用于调用过程的 CALL 语句中,因此其语法需要符合 SQL CALL 语句的要求。 VARCHAR(8) 类型的参数 database_name 指定要执行该存储过程的数据库的别名。存储过程不一定要驻留在同一数据库中。 VARCHAR(128) 类型的参数 user_name 和 VARCHAR(200) 类型的参数 password 用于确定连接数据库以及执行该过程时所使用的注册信息。

  该函数调用当前数据库中的存储过程。它建立新的连接之后就通过过程名和作为输入参数而提供的参数来执行 CALL 语句。该 UDF 返回 0(零)表明 CALL 语句(以及相应的 CONNECT 和 CONNECT RESET 语句)执行成功。否则,将返回 DB2 命令行处理器(Command Line Processor,CLP)的返回码和一条提供了更多信息的出错消息。清单 6 演示了函数 CREATE_PROCEDURE 的执行。可以在“下载”小节中找到该脚本( trig_calls_proc.db2)的源代码。

  清单6. 测试函数 CREATE_PROCEDURE( )

  下面这个例子测试演示了从触发器调用包含一个参数的存储过程。

  在该示例中,我们创建 t1 和 t2 这两个表,带有一个输入参数(p)

  的过程(abc)以及一个触发器(ins)。在执行触发器时,它将调用该过程。

  然后,过程将会将 num 列的新值(NEW.coll)插入到表 t1 中。

  这可以通过以下操作来测试:在表 t2 上执行插入后对 t1 发出 select

  来检验该表内容 —— 进而检验该过程是否成功执行。

(责任编辑:IT教学网)

更多

推荐数据库文章