首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

用 cygwin中的gcc编译一个连接oracle的文件时报错,请教什么原因?怎么解决

2012-03-01 
用 cygwin中的gcc编译一个连接oracle的文件时报错,请问什么原因?如何解决? /*oracledb.c内容*/#includest

用 cygwin中的gcc编译一个连接oracle的文件时报错,请问什么原因?如何解决?

/*oracledb.c   内容*/
#include   <stdio.h>
#include   <stdlib.h>
#include   <string.h>
#include   <sqlda.h>
#include   <sqlcpr.h>

EXEC   SQL   BEGIN   DECLARE   SECTION;
char   vusername[]= "abc ";
char   vpassword[]= "abc123 ";
char   vdbname[]= "oracledb ";
char   emp_name[5][15];
int   emp_number[5];
float   salary[5];
EXEC   SQL   END   DECLARE   SECTION;

EXEC   SQL   INCLUDE   SQLCA;

void   print_rows(int   n);
int   sqlerror();

void   main()
{
                int   num_ret;

                EXEC   SQL   WHENEVER   SQLERROR   DO   sqlerror()   ;
                EXEC   SQL   CONNECT   :vusername   IDENTIFIED   BY   :vpassword   USING   :vdbname;
                printf( "\nConnected   to   ORACLE   as   user:%s\n ",   vusername);
                EXEC   SQL   DECLARE   c1   CURSOR   FOR
                SELECT   EMPNO   ,   ENAME   ,   SAL   FROM   EMP;
                EXEC   SQL   OPEN   c1;
                num_ret   =   0;

                for(;;)
                {
                                EXEC   SQL   WHENEVER   NOT   FOUND   DO   break;
                                EXEC   SQL   FETCH   c1   INTO   :emp_number   ,   :emp_name   ,   :salary;
                                print_rows   (sqlca.sqlerrd[2]   -   num_ret);
                    printf( "The   value   sqlca   %ld---num_ret   ---%d.\n ",sqlca.sqlerrd[2],num_ret);
                                num_ret=sqlca.sqlerrd[2];
                }
                if   ((sqlca.sqlerrd[2]   -   num_ret)> 0)
                                print_rows(sqlca.sqlerrd[2]   -num_ret);
                EXEC   SQL   CLOSE   c1;
                printf( "\nHave   a   good   day.\n ");
                EXEC   SQL   COMMIT   WORK   RELEASE;
}

void   print_rows(int   n)
{
                int   i;


                printf( "\nNumber   Employee   Salary\n ");
                printf( "------------------------------\n ");
                for   (i=0;i <n;   i++   )
                                printf( "%   -   9d%-   8s%9.2f\n ",emp_number,   emp_name,salary);
}
int   sqlerror()
{
                EXEC   SQL   WHENEVER   SQLERROR   CONTINUE;
                printf( "\noracle   error   detected:\n ");
                printf( "\n%.70s\n ",   sqlca.sqlerrm.sqlerrmc);
                EXEC   SQL   ROLLBACK   WORK   RELEASE;
                exit(1);
}

//////////////////////////////////////////
用cygwin的gcc编译的时候出错,提示如下:

pll@f88e1286bdb847f   ~
$   ls
newmain.c     oracledb.c

pll@f88e1286bdb847f   ~
$   gcc   oracledb.c
oracledb.c:16:   error:   parse   error   before   "SQL "
oracledb.c:16:   warning:   data   definition   has   no   type   or   storage   class
oracledb.c:23:   error:   parse   error   before   "SQL "
oracledb.c:23:   warning:   data   definition   has   no   type   or   storage   class
oracledb.c:25:   error:   parse   error   before   "SQL "
oracledb.c:25:   warning:   data   definition   has   no   type   or   storage   class
oracledb.c:   In   function   `main ':
oracledb.c:34:   error:   `EXEC '   undeclared   (first   use   in   this   function)
oracledb.c:34:   error:   (Each   undeclared   identifier   is   reported   only   once
oracledb.c:34:   error:   for   each   function   it   appears   in.)
oracledb.c:34:   error:   parse   error   before   "SQL "
oracledb.c:37:   error:   parse   error   before   "SQL "
oracledb.c:44:   error:   parse   error   before   "SQL "
oracledb.c:52:   error:   parse   error   before   "SQL "
oracledb.c:54:   error:   parse   error   before   "SQL "
oracledb.c:31:   warning:   return   type   of   'main '   is   not   `int '
oracledb.c:   In   function   `sqlerror ':
oracledb.c:67:   error:   `EXEC '   undeclared   (first   use   in   this   function)
oracledb.c:67:   error:   parse   error   before   "SQL "
oracledb.c:70:   error:   parse   error   before   "SQL "

pll@f88e1286bdb847f   ~
$

[解决办法]
你这个应该先用Oracle的c预处理程序处理一下生成C代码,然后在用gcc编译吧

热点排行