WEB开发网
开发学院数据库DB2 DB2 v7.2 中的高级 SQL 过程脚本编制 阅读

DB2 v7.2 中的高级 SQL 过程脚本编制

 2008-09-09 16:30:15 来源:WEB开发网   
核心提示: UNIX Windowsdb2 connect to <dbname>db2 -td@ -f procparam.ddldb2 call getText($1)db2 drop procedure getText (INT)db2 connect to <dbname&g

UNIX Windowsdb2 connect to <dbname>
db2 -td@ -f procparam.ddl
db2 call getText($1)
db2 drop procedure getText (INT)
db2 connect to <dbname>
db2 -td@ -f procparam.ddl
db2 call getText(%1)
db2 drop procedure getText (INT)

然后,为了执行这个脚本,请完成:

chmod +x procparam.cm (仅 UNIX 需要)
procparam.cmd 1

额外技巧

本节包含一些我觉得非常有用的技巧:

时间戳记和其它特殊寄存器

UDF 及脚本中的游标

时间戳记和其它特殊寄存器

查看下面的脚本。您希望发生什么?

BEGIN ATOMIC
   Insert into HELLO values (char (current timestamp));
   Insert into HELLO values (char (current timestamp));
END

乍一看,您可能希望在 Hello 表中插入两个稍有不同的时间戳记值。然而,如果执行它,那么您会发现同一个时间戳记值插入了两次。发生这种情况是因为实际上 ATOMIC 复合 SQL 语句是作为一个 SQL 语句执行的一组 SQL 语句。因此,要小心使用日期和时间寄存器。

当 BEGIN ATOMIC 是这个行为定义的一部分时,该行为也适用于 SQL UDF。这种行为不适用于 SQL 存储过程,除非在同一个 BEGIN ATOMIC 节中包含了 SQL 语句。

如果您需要生成唯一的时间戳记,将 GENERATE_UNIQUE() 函数与时间戳记一起使用。例如:

BEGIN ATOMIC
   insert into HELLO
      values (char(timestamp(generate_unique()) + current timezone));
   insert into HELLO
      values (char(timestamp(generate_unique()) + current timezone));
END

UDF 及脚本中的游标

目前还不支持可更新的游标。如果您需要在脚本中使用游标,那么可以使用 FOR LOOP 构造(它的功能与只读游标类似),并在循环内使用 UPDATE 语句。例如:

BEGIN ATOMIC
   FOR cur1 AS SELECT c1, c2, c3 from mytable
   IF cur1.c1 = 1 THEN
      INSERT INTO sometable1 values (cur1.c2, cur1.c3);
   ELSE
      UPDATE sometable1 SET somecol=cur1.c2;
   END IF;
END@

结束语

我们已经了解了如何利用 DB2 的增强脚本编制功能。脚本编制有助于自动执行任务、测试和使简单方案快速原型化。我们知道了如何编写包含 SQL 过程语言元素的脚本、如何将脚本的输出假脱机存储到一个日志文件以及如何通过使用 UDF 和 SQL 存储过程在脚本中处理参数。

上一页  5 6 7 8 9 10 

Tags:DB 高级 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接