Pro C动态SQL查询

时间:2014-12-23 10:36:59

标签: sql oracle plsql sqlplus oracle-pro-c

我必须使用Pro C执行以下查询以获取输出并将den输出显示给用户。

我尝试了以下代码段:

int count=0;
char query1[100]="select count(code) from customer where customer_type='a';";
EXEC SQL ALLOCATE DESCRIPTOR 'out' ;
EXEC SQL PREPARE statement FROM :query1 ;
EXEC SQL DESCRIBE OUTPUT statement USING DESCRIPTOR 'out' ;
EXEC SQL SET DESCRIPTOR 'out' VALUE 1 TYPE = :data_type, 
    LENGTH = :data_len, DATA = :count ;
EXEC SQL DECLARE c CURSOR FOR statement ;
EXEC SQL OPEN c ;
EXEC SQL FETCH c INTO DESCRIPTOR 'out' ;
EXEC SQL GET DESCRIPTOR 'out' VALUE 1 :count = DATA;
EXEC SQL CLOSE c ;
printf("%-8d ",count);

但我得到的输出总是0。

我该如何进行正确的输出? 任何人都可以帮助...

2 个答案:

答案 0 :(得分:0)

你很可能在那里有一些没有被注意到的错误。

使用EXEC SQL WHENEVER进行一些错误检查。

跳出来的一件事是query1值末尾的分号。如果我没记错的话,Pro * c会对它进行barf。

答案 1 :(得分:0)

我强烈建议不要使用Pro * C动态SQL(Oracle动态SQL方法4)的这种方法,除非你可以避免它。

您需要使用此方法的唯一情况是,当您使用动态生成的SQL并且您不知道将使用多少主机变量时。例如。您不知道SELECT子句中有多少列。

可以在http://docs.oracle.com/cd/B28359_01/appdev.111/b28427/pc_15ody.htm#i7419找到使用Oracle动态SQL方法4的完整示例。