Pro*C访问Oracle数据库的例子
test.pc
$ cat test.pc
#include
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION ;
char hvalue[16];
char connectstring[] = "scott/tigerr@orcl";
EXEC SQL END DECLARE SECTION ;
#define DUMP_SQLCA() \
{ \
printf("****************** DUMP OF SQLCA ******************\n"); \
printf("SQLCAID: %s\n", sqlca.sqlcaid); \
printf("SQLCODE: %d\n", sqlca.sqlcode); \
printf("SQLERRML: %d\n", sqlca.sqlerrm.sqlerrml); \
printf("SQLERRMC: %s\n", sqlca.sqlerrm.sqlerrmc); \
printf("SQLERRP: %s\n", sqlca.sqlerrp); \
printf("SQLERRD[0]: %d\n", sqlca.sqlerrd[0]); \
printf("SQLERRD[1]: %d\n", sqlca.sqlerrd[1]); \
printf("SQLERRD[2]: %d\n", sqlca.sqlerrd[2]); \
printf("SQLERRD[3]: %d\n", sqlca.sqlerrd[3]); \
printf("SQLERRD[4]: %d\n", sqlca.sqlerrd[4]); \
printf("SQLERRD[5]: %d\n", sqlca.sqlerrd[5]); \
printf("SQLWARN: %s\n", sqlca.sqlwarn); \
printf("***************** END OF SQLCA DUMP **************\n"); \
}
#define CHECK_SQL(failure_string) \
{ \
if (sqlca.sqlcode != 0) { \
printf("!!!ERROR: %s\n", failure_string); \
DUMP_SQLCA(); \
goto sqlerror; \
} \
}
main (int argc, char *argv[])
{
EXEC SQL CONNECT :connectstring;
CHECK_SQL("Connect failed");
EXEC SQL SELECT 'ABCD' into :hvalue FROM DUAL;
CHECK_SQL("Select failed");
printf("Select Result: [%s]\n", hvalue);
return 0;
sqlerror:
return -1;
}
makefile
$ cat makefile
TARGET=test
$(TARGET): $(TARGET).pc
proc iname=$(TARGET).pc
gcc -o $(TARGET) -I$(ORACLE_HOME)/include $(TARGET).c -L$(ORACLE_HOME)/lib -lclntsh
clean:
rm -f $(TARGET) $(TARGET).lis $(TARGET).c
运行
$ make
$ ./test
Select Result: [ABCD ]