DB2 的 SQL 存储过程写法,坑还挺多的,尤其是刚上手的时候。一不留神,用了个代替空格,编译直接报错。像建临时表也有讲究,DB2只认user temporary tablespace,你用系统自带的?那是没戏的。还有,临时表只在当前会话内有效,写多线程代码时可得当心。

存储过程CREATE PROCEDURE建的时候,语法得规范,TAB 不能有,空格得对齐,不然容易踩坑。DB2 对格式要求还挺“矫情”的,写惯了别的数据库不太习惯。游标也分两种,常规的需要你手动OPENFETCHCLOSE,不过可以WITH HOLD让它事务后还活着。循环游标省事点,但就没法WITH HOLD了,场景不太一样。

要取第一条记录,用FETCH FIRST还挺方便的,比如SELECT * FROM tb_market_code FETCH FIRST 1 ROWS ONLY,但你要把值赋给变量,嗯,那就不能偷懒用INTO了,只能老老实实用游标。更新时,可以搭配WHERE CURRENT OF做精准更新,前提是你那游标得是可更新的,不然照样报错。

DECODE功能没有?别急,CASE语句完全能顶上,灵活度还更高点。事务控制这块,COMMITROLLBACK得配合好,不然不加WITH HOLD的游标会在提交后被关掉,写多事务逻辑时要小心。

如果你正在摸索DB2的写法,或者要把别的数据库逻辑迁过来,这篇文章讲的内容还挺全,建议先通读一遍,少走弯路。