自己写了一下,执行不成功:
CREATE PROCEDURE DB2INST1.GETPEOPLE2(IN ids bigint )
SPECIFIC DB2INST1.GETPEOPLE2
DYNAMIC RESULT SETS 1
MODIFIES SQL DATA
LANGUAGE SQL
BEGIN
update test2 set a=a+1 where a>ids;
DECLARE rs1 CURSOR
select * from db2inst1.test2;
OPEN rs1;
END
错误显示:
SQL0104N 在 "ids; DECLARE" 之后发现意外的标记 "rs1 CURSOR sele"。期望的标记可能包括:"<psm_variable_name_list>"。 LINE NUMBER=10. SQLSTATE=42601
感觉 DB2 写东西很难上手,郁闷中。。。
1
flyingnn OP 对了,是 DB2 的 存储过程。
|
2
ivvei 2016-02-03 17:21:31 +08:00 1
你能不能先把基础语法学习下…… Declare 一个游标后可以直接这么加语句? FOR 都不需要?
|
3
flyingnn OP 嗯,是删除了部份,漏掉了,
CREATE PROCEDURE DB2INST1.GETPEOPLE2(IN ids bigint ) SPECIFIC DB2INST1.GETPEOPLE2 DYNAMIC RESULT SETS 1 MODIFIES SQL DATA --READS SQL DATA LANGUAGE SQL BEGIN update test2 set a=a+1 where a>ids; DECLARE rs1 CURSOR WITH RETURN TO CLIENT FOR select * from db2inst1.test2; OPEN rs1; END 当没有 update 这句,是可以成功 create 的,加了 update,就不行了。 主要是用得少,没怎么去看文档。 |
4
flyingnn OP @ivvei
这个写没问题: CREATE PROCEDURE DB2INST1.GETPEOPLE2(IN ids bigint ) SPECIFIC DB2INST1.GETPEOPLE2 DYNAMIC RESULT SETS 1 MODIFIES SQL DATA --READS SQL DATA LANGUAGE SQL BEGIN DECLARE rs1 CURSOR WITH RETURN TO CLIENT FOR select * from db2inst1.test2; update test2 set a=a+1 where a>ids; commit; OPEN rs1; END 这样就不行了: CREATE PROCEDURE DB2INST1.GETPEOPLE2(IN ids bigint ) SPECIFIC DB2INST1.GETPEOPLE2 DYNAMIC RESULT SETS 1 MODIFIES SQL DATA --READS SQL DATA LANGUAGE SQL BEGIN update test2 set a=a+1 where a>ids; DECLARE rs1 CURSOR WITH RETURN TO CLIENT FOR select * from db2inst1.test2; OPEN rs1; END 提示: SQL0104N 在 "" 之后发现意外的标记 "<cursor declaration>"。期望的标记可能包括:"<SQL statement>"。 LINE NUMBER=10. SQLSTATE=42601 |