Pro C 动态 SQL 查询

Posted

技术标签:

【中文标题】Pro C 动态 SQL 查询【英文标题】:Pro C dynamic SQL query 【发布时间】:2014-12-23 10:36:58 【问题描述】:

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

我尝试了以下代码sn-p:

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。

我该如何继续获得正确的输出? 谁能帮忙...

【问题讨论】:

int data_type = 4, data_len = 1 ;也被声明了 请检查您的标签:proc 不适用于 Pro-C。你确定这个问题是针对 mysql 的吗? 谢谢..我已经更改了标签..我在哪里出错了..??还是我错过了什么??? 这里不涉及PL/SQL,与SQL*Plus无关。为什么要重新添加这些标签? 【参考方案1】:

很可能你有一些没有引起注意的错误。

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

让我印象深刻的一件事是 query1 值末尾的分号。如果我没记错的话,Pro*c 会吐出来的。

【讨论】:

【参考方案2】:

我强烈建议不要使用这种 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 的完整示例。

【讨论】:

以上是关于Pro C 动态 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

在 C#/.NET3.5 中构造动态 sql 查询的最佳方式?

在 SELECT 查询 SQL 中生成动态日期列

MyBatis动态SQL

动态 SQL 透视查询中的分组和聚合函数

动态查询的最佳选择?

sql 批量修改数据