无法根据if else条件定义光标

问题描述 投票:0回答:1

我试图根据 Pro C 程序中的 if else 条件声明游标,并在尝试以下逻辑时收到以下错误。

我知道为什么它给我以下警告,但我担心的是,当我尝试打开游标并根据收到的 sqlcode 执行处理时,这种方法无法按预期运行。

我认为我们可以创建两个单独的游标,然后根据 if else 条件打开一个游标,但只是想检查是否有其他解决方案?

if(is_valid[0] == 'Y')
{
 EXEC SQL DECLARE cust CURSOR FOR
 select customer, id, price from table1;
}
else
{
 EXEC SQL DECLARE cust CURSOR FOR
 select customer, id, price from table2;
}
}

错误:

PCC-W-02332,尝试重新定义 SQL 标识符

sql c oracle plsql
1个回答
0
投票

我做这件事已经很多年了。这种“增强”是预编译器宏的混合体,因此有其局限性。

来自 doco:

但是,在给定文件中,每个 DECLARE 语句必须是唯一的。也就是说,您不能在一个预编译单元中 DECLARE 两个同名的游标,甚至跨块或过程,因为游标的作用域在一个预编译单元中是全局的。文件。

建议您学习(并且可能能够使用)表名称的主机变量。

“SQL 语句中主变量必须以冒号 (:) 为前缀...”

可能的解决方案(未经测试):

int     empno; 
char    ename[10]; 
float   sal; 
char    emp[32];

strcpy( emp, (val == 0) ? "table0" : "table1" );
/* ... */
EXEC SQL SELECT ename, sal INTO :ename, :sal FROM :emp 
    WHERE empno = :empno; 

请尝试一下,如果有帮助请告诉我们。

(顺便说一句:语言的名称是Pro*C。)

© www.soinside.com 2019 - 2024. All rights reserved.