0

我在 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 在“DECLARE C1 CURSOR”之后发现了意外的标记“FOR”。预期的标记可能包括:“”。行号=10。SQLSTATE=42601

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

4

1 回答 1

2

这是一个棘手的问题,但经过一些测试后,我发现了问题:您不能在原子复合语句中声明游标。替换BEGIN ATOMICBEGIN.

我希望我可以将您指向允许的语句列表ATOMIC,但它隐藏在手册中的某个地方,我现在找不到它。

(这是 DB2 可怕的错误报告的经典案例。它不应该能够识别不允许的语句并告诉你吗?)

编辑:这是问题之一,但还有一些其他问题,我没有,所以我无法调试它。

于 2012-09-28T08:53:21.770 回答