免费注册 查看新帖 |

Chinaunix

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

求助:.PRO*C出错 ORACLE.SQL .存储过程的调用问题??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-28 16:29 |只看该作者 |倒序浏览
Pro*C/C++: Release 2.2.4.0.0 - Production on Mon May 28 16:26:39 2007

Copyright (c) Oracle Corporation 1979, 1996.  All rights reserved.

System default option values taken from: /usr/oracle/precomp/admin/pcscfg.h

Preprocessor error at line 77, column 1, file 312.pc:
1
(1) PCC-S-02022, Found end of file while scanning a SQL statement


(1) PCC-F-02102, Fatal error while doing C preprocessing

说明:ORACLE 版本 7.3.4  unix 下 PRO*C 编的程序
我的312.pc共 76 行. 这是什么原因啊 .
另外 : PCC-S 的错误代码怎么查找啊? 象 $oerr ora errno 那样的命令有没有啊?



希望解决啊

[ 本帖最后由 hzyhzj3 于 2007-5-30 08:56 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-29 11:11 |只看该作者
现在还没解决 郁闷啊
请高手指点啊 谢谢!

论坛徽章:
0
3 [报告]
发表于 2007-05-29 11:21 |只看该作者
文件名调整一下;
是否由于SQL没有结束?另外,将源程序代码贴上来

论坛徽章:
0
4 [报告]
发表于 2007-05-29 11:28 |只看该作者

回复 3楼 andychan 的帖子

#include <stdio.h>
#include <string.h>
typedef char asciz;

EXEC SQL BEGIN DECLARE SECTION;
   EXEC SQL TYPE asciz IS STRING(20);
   asciz username[20];
   asciz password[20];
   int dept_number;
   char address[10][21];
   char emp_name[10][21];
   int tex[10];
   int done_flag;
   int array_size;
   int ret_num;
   int SQLCODE;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
int print_rows();
int sqlerror();


main()
{
   int i;
   strcpy(username,"han";
   strcpy(password,"han";

   EXEC SQL WHENEVER SQLERROR DO sqlerror();
   EXEC SQL CONNECT :username IDENTIFIED BY :password;
   printf("\nConnect to ORACLE as user:%s\n",username);
   printf("Enter department number:";
   scanf("%d",&dept_number);
   fflush(stdin);
   array_size=10;
   done_flag=0;
   ret_num=0;

   for(;
   {
        EXEC SQL EXECUTE
           BEGIN
                emp_actions.get_employees                (:dept_number,:array_size,:ret_num,:done_flag,
                :emp_name,:address,:tex);
           END;
        END_EXEC;
        print_rows(ret_num);
        if (done_flag)
                break;
   }
   EXEC SQL COMMIT WORK RELEASE;
   exit(0);
}
print_rows(n)
int n;
{
   int i;
   if (n==0)
   {
      printf("No rows retrieved.\n";
      return;
    }
    printf("\n\nGot %d rows %c\n",n,n==1?'\0':'s');
    printf("%-20.20s%-50.50s%s\n","Ename","Address","Tex";
    for(i=0;i<n;i++)
        printf("%-20.20s%-50.50s%d\n",emp_name[i],address[i],tex[i]);
}


sqlerror()
{
   EXEC SQL WHENEVER SQLERROR CONTINUE;
   printf("\nORACLE error detected:";
   printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
   EXEC SQL ROLLBACK WORK RELEASE;
   exit(1);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP