我试图根据 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 标识符
我做这件事已经很多年了。这种“增强”是预编译器宏的混合体,因此有其局限性。
来自 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。)