新车轻微抖动正常吗:DB2 -Cursor sample
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 04:17:40
首先, 以 db2 -td@ 进入系统。
也就是以 @ 作为 语句终止字符
测试表与数据
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
3 THREE
3 条记录已选择。
output_debug 表,为只有1列的 测试表,用于暂时存储中间过程的数据。
简单循环处理I
TRUNCATE TABLE output_debug IMMEDIATE@
BEGIN
-- 暂存变量.
DECLARE v_id INT;
DECLARE v_value VARCHAR(10);
DECLARE SQLCODE INT;
-- 定义游标.
DECLARE c_test_main CURSOR FOR
SELECT id, value FROM test_main;
-- 打开游标.
OPEN c_test_main;
-- 填充数据.
FETCH c_test_main INTO v_id, v_value;
-- 假如检索到了数据,才处理.
WHILE (SQLCODE = 0) DO
INSERT INTO output_debug VALUES(v_value);
-- 填充下一条数据.
FETCH c_test_main INTO v_id, v_value;
END WHILE;
-- 关闭游标
CLOSE c_test_main;
END
@
db2 => select * from output_debug@
DATA
------------------------------------
ONE
TWO
THREE
3 条记录已选择。
简单循环处理II
TRUNCATE TABLE output_debug IMMEDIATE@
BEGIN
-- 暂存变量.
DECLARE v_id INT;
DECLARE v_value VARCHAR(10);
DECLARE SQLCODE INT;
-- 定义游标.
DECLARE c_test_main CURSOR FOR
SELECT id, value FROM test_main;
-- 打开游标.
OPEN c_test_main;
MyLoop: LOOP
-- 填充数据.
FETCH c_test_main INTO v_id, v_value;
IF (SQLCODE = 0) THEN
-- 假如检索到了数据,插入 debug 表.
INSERT INTO output_debug VALUES(v_value);
ELSE
-- 假如没有数据,跳出循环.
LEAVE MyLoop;
END IF;
END LOOP;
-- 关闭游标
CLOSE c_test_main;
END
@
db2 => select * from output_debug@
DATA
------------------------------------
ONE
TWO
THREE
3 条记录已选择。
用于更新的游标
BEGIN
-- 暂存变量.
DECLARE v_id INT;
DECLARE v_value VARCHAR(10);
DECLARE SQLCODE INT;
-- 定义游标.
-- with hold 选项。如果循环内有commit或rollback 保持该cursor不被关闭
DECLARE c_test_main CURSOR with hold FOR
SELECT id, value FROM test_main for update;
-- 打开游标.
OPEN c_test_main;
MyLoop: LOOP
-- 填充数据.
FETCH c_test_main INTO v_id, v_value;
IF (SQLCODE = 0) THEN
-- 假如检索到了数据,修改 test_main 表.
UPDATE
test_main
SET
value = value || '1'
WHERE
CURRENT OF c_test_main;
ELSE
-- 假如没有数据,跳出循环.
LEAVE MyLoop;
END IF;
END LOOP;
-- 关闭游标
CLOSE c_test_main;
END
@
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE1
2 TWO1
3 THREE1
3 条记录已选择。
FOR的使用
TRUNCATE TABLE output_debug IMMEDIATE@
BEGIN
-- 游标处理.
FOR V1 AS c_test_main CURSOR FOR
SELECT id, value FROM test_main
DO
INSERT INTO output_debug VALUES(V1.value);
END FOR;
END
@
db2 => select * from output_debug@
DATA
-----------------------------------
ONE1
TWO1
THREE1
3 条记录已选择。