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

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