|
10鱼币
#include <stdio.h>
#ifdef _WIN32
#define DLLIMPORT __declspec(dllimport)
#define DLLEXPORT __declspec(dllexport)
#define CDECL __cdecl
#else
#define DLLIMPORT
#define DLLEXPORT
#define CDECL
#endif
#define SQLCA_STORAGE_CLASS extern
/*SQL没有记录的返回值*/
#define SQLNOTFOUND 1403/*Pro C必须在每一个程序中写的语句,SQLCA的大小写必须所有程序一致*/
EXEC SQL INCLUDE SQLCA;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES); /*该语句可以在Makefile中写*/
/*有了下面的定义,就不需要进行变量类型的等价了VAR IS STRING()*/
EXEC ORACLE OPTION (CHAR_MAP = STRING); /*该语句可以在Makefile中写*/
void main()
{
/*声明需要在SQL语句中使用的变量,这些变量在非SQL中也能使用*/
EXEC SQL BEGIN DECLARE SECTION;
char szCodeName[41] = ""; /*CHAR变量的长度必须比数据库中大1*/
/*对VARCHAR类型必须进行等价说明,否则可能有空格,或设置CHAR_MAP=STRING*/
EXEC SQL VAR szCodeName IS STRING(41);
/*指示变量,必须是short int 类型,*/
short int indCodeName = 0;
/*与EXEC SQL BEGIN DECLARE SECTION;成对使用*/
EXEC SQL END DECLARE SECTION;
/*也可以不需要EXEC SQL BEGIN /END DECLARE SECTION;,在编译上控制*/
strcpy(szConnectString,"jifei/jifei@jifei");
/*连接数据库*/
EXEC SQL connect :szConnectString;
/*或EXEC SQL CONNECT :szUser IDENTIFIED BY :szPassword using :szDBString;*/
if (sqlca.sqlcode !=0) /*判断SQL语句是否执行成功*/
{
printf("Connect Error , Error Message : %s\n",sqlca.sqlerrm.sqlerrmc);
exit(0);
}
EXEC SQL select code_name into :szCodeName
from CODE_NAME where rownum = 1;
if (sqlca.sqlcode < 0) /*判断SQL语句是否执行成功*/
{
printf("Connect Error , Error Message : %s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL rollback work release;
exit(0);
}
if (sqlca.sqlcode == SQLNOTFOUND) /*没有结果,必须用SQLNOTFOUND,不要直接用1403*/
{
printf("No Data to Fetch\n");
EXEC SQL rollback work release;
exit(0);
}
printf("Code_Name = %s.\n",szCodeName);
/*提交并断开连接*/
EXEC SQL commit work release;
}
|
最佳答案
查看完整内容
这是Oracle的Pro*C编程,在Windows的VS中需要进行Pro* C相关配置
|