用 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编译吧