我在DB2 PL/SQL函数中声明游标如下:
create function query1(tbname VARCHAR(32), msisdn VARCHAR(32))
returns VARCHAR(40)
LANGUAGE SQL
READS SQL DATA
NO EXTERNAL ACTION
DETERMINISTIC
begin atomic
DECLARE vsql varchar(2000);
DECLARE dt_UTC date;
DECLARE C1 CURSOR FOR select productid from Subscription_000 where msisdn= 123456;
SET vsql = 'select productid from Subscription_000 where msisdn= 123456';
OPEN C1;
return '123';
end
@ 我将上面的内容保存到k2.sql中,当我试图使用命令: db2 -td@ -f k2.sql编译这个函数时,我得到了以下错误:
DB21034E命令作为SQL语句处理,因为它不是有效的命令行处理器命令。在SQL处理期间,它返回: SQL0104N,在“声明C1游标”之后找到了一个意外的标记"FOR“。预期的令牌可能包括:"“。线NUMBER=10. SQLSTATE=42601
这里有什么问题吗.?
发布于 2012-09-28 08:53:21
这是一个棘手的问题,但经过一些测试后,我发现了问题:您不能在原子复合语句中声明游标。将BEGIN ATOMIC替换为BEGIN。
我希望我能为您指出ATOMIC允许的语句列表,但是它隐藏在手册的某个地方,目前我找不到它。
(这是DB2可怕的错误报告的典型例子。它不应该识别一个不被允许的陈述并告诉你吗?)
编辑:这是一个问题,但也有其他一些问题,我没有,所以我不能调试它。
https://stackoverflow.com/questions/12636126
复制相似问题