免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5233 | 回复: 12
打印 上一主题 下一主题

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-05 13:28 |只看该作者 |倒序浏览
在ESQL-C怎么不能用EXEC SQL DEALLOCATE CURSOR 词句,编译的错误如下:
        ${SYBASE}/bin/cpre -l -m operdb.cp
M_SYNTAX_PARSE,Syntax error in file operdb.cp, at line: 4525 near <CURSOR>;
1 Error(s) and 0 Warning(s) found.
Statistical Report:
        Program name: cpre
        Options specified: -l -m
        Input file name: operdb.cp
        Listing file name:
        Target file name: operdb.c
        ISQL file name:
        Tag ID specified:
        Compiler used: ANSI_C
        Open Client version: CS_VERSION_100
        Number of information messages: 11
        Number of warning messages: 0
        Number of error messages: 1
        Number of SQL statements parsed: 270
        Number of host variables declared: 378
        Number of SQL cursors declared: 7
        Number of dynamic SQL statements: 0
        Number of stored Procedures generated: 1
        Connection(s) information:
                User id:
                Server:
                Database:
FILE operdb.cp: Syntax errors in Pass 1 : Pass 2 not done.
*** Error code 1 (bu21)


请高手指教。先行谢过了!!

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2003-12-05 21:10 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

把你的程序放上了看看,应该没问题

论坛徽章:
0
3 [报告]
发表于 2003-12-06 13:41 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

源代码如下: 请帮忙看看
int trans_offline()
{
        EXEC SQL BEGIN DECLARE SECTION;
        char card_no[21];
        char agency_id[7];
        char card_agency[7];
        double amt;
        char trans_type[5];       
        char app_type[3];
        char merchantid[16];
        char batchno[7];
        char traceno[7];
        char t_id[9];
        char tmp_time[30];
        EXEC SQL END DECLARE SECTION;

       
        EXEC SQL DECLARE offline_cursor CURSOR FOR
                SELECT ot_cardno, ot_cardagencyid, ot_transamount, ot_transtime, ot_transtype,

ot_apptype, ot_merchantid, ot_batchno, ot_traceno
                                FROM tb_tmpofflinetrans
                        WHERE ot_terminalid = :t_id;
                       
        EXEC SQL OPEN offline_cursor;

        EXEC SQL BEGIN TRANSACTION;
        for( ; ; )
        {
                memset(tmp_time, 0, sizeof(tmp_time));
                EXEC SQL FETCH offline_cursor INTO :card_no, :card_agency, :amt, :tmp_time,

:trans_type, :app_type, :merchantid, :batchno, :traceno;

                if ( sqlca.sqlcode == 100 )
                {

                        EXEC SQL CLOSE offline_cursor;
                        EXEC SQL DEALLOCATE CURSOR offline_cursor;        /*这个语句加上就出现编译错误*/
                        EXEC SQL COMMIT TRANSACTION;
                        return 0;
                }
                else if(sqlca.sqlcode == 0)
                {
                        //......
                }
                else
                {
                        EXEC SQL CLOSE offline_cursor;
                        EXEC SQL ROLLBACK TRANSACTION;
                        return -1;
                }       
        }
}

论坛徽章:
0
4 [报告]
发表于 2003-12-06 14:44 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

在联数据库connect 后面加上:
EXEC SQL chained off

论坛徽章:
0
5 [报告]
发表于 2003-12-06 15:32 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

不能编译过去,还是一样的错误,随便问一下EXEC SQL chained off有什么作用?
另,加上后,连接出现incorrect syntax near the keyword 'off'的错误.

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
6 [报告]
发表于 2003-12-07 14:02 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

我想起来了,你的sybase是什么版本的好像11。0。3就是不支持 DEALLOCATE CURSOR这个语句,不用没关系的。
这个情况和set chain off 没有关系。

论坛徽章:
0
7 [报告]
发表于 2003-12-07 17:49 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

不对,一个文件中不能定义相同的CURSOR

论坛徽章:
0
8 [报告]
发表于 2003-12-08 21:28 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

我在同一个文件中没有定义相同的CURSOR,其实没有DEALLOCATE CURSOR语句,程序也可以做正确的处理,但一这样的问题,第一次调用这个函数没有问题,当第二次调用这个函数时就会报错,错误如下:
[09]
** SQLCODE=(-563)
[09]
** Error Message:
[09]
** There is already another cursor with the name 'offline_cursor' at the nesting level '0'.

不知道什么意思。

我用的数据库版本(sco unix下)是11.0.3
ESQL是10.0.4
这个版本的ESQL不能用动态SQL,很有可能也不支持DEALLOCATE CURSOR词句吧!

哪位大虾有用过更高版本的ESQL,是不是版本的原因产生这个问题??

顺便问一下,从哪里可以找的到ESQL 11.x啊?

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
9 [报告]
发表于 2003-12-09 08:29 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

11.0.3肯定不支持这个语句,我也遇到过。
不过你说的函数执行第二边时会报游标存在,我倒是没遇到。
是否因为在你的函数中并没有真正完成commit,游标还没有释放,造成的?
那mjwaishelley  所说的加上 set chainoff 就有道理了。

论坛徽章:
0
10 [报告]
发表于 2003-12-09 12:15 |只看该作者

esql C中怎么不能用EXEC SQL DEALLOCATE CURSOR cursor_name??

10.0.4 支持动态sql
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP