在PL / SQL函数中使用游标时出现DB2错误

时间:2012-09-28 08:12:21

标签: cursor db2

我在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发现了一个意外的令牌“FOR”   “DECLARE C1 CURSOR”。预期的代币可能包括:   “”。 LINE NUMBER = 10。   SQLSTATE = 42601

关于这里有什么问题的任何建议......?

1 个答案:

答案 0 :(得分:2)

这是一个棘手的问题,但经过一些测试我发现了问题:你无法在原子复合语句中声明游标。仅使用BEGIN ATOMIC替换BEGIN

我希望我能指出ATOMIC允许的语句列表,但它隐藏在手册的某处,我目前无法找到它。

(这是DB2糟糕的错误报告的经典案例。它不应该能够识别不允许的声明并告诉你吗?)

编辑:这是其中一个问题,但也有一些其他问题,我没有,所以我无法调试。