⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdb.c

📁 用C语言在linux下编写的使用PROC进行oracle数据库操作的测试程序
💻 C
字号:
#include <stdlib.h>
#include <math.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>
#include <signal.h>
#include <dirent.h>

#define USERNAME "scttsc"
#define PASSWORD "scttsc"
#define DATABASE "EYE"

EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR DO sqlerror();
void sqlerror();

int cdb_OpenDatabase( char *u_name, char *u_pwd, char *u_dbs )
{
	VARCHAR sid[64];

	if( u_dbs == NULL || u_dbs[0] == '\0' ) {
		EXEC SQL CONNECT :u_name IDENTIFIED BY :u_pwd;
	}else {
		sprintf( (char *)sid.arr, "%s/%s@%s", u_name, u_pwd, u_dbs );
		sid.len = strlen( (char *)sid.arr );
		EXEC SQL CONNECT :sid;
	}
	return sqlca.sqlcode;
}


void cdb_CloseDatabase()
{
	EXEC SQL COMMIT WORK RELEASE;
}

void cdb_CommitDatabase()
{
	EXEC SQL COMMIT WORK RELEASE;
}

void cdb_RollBackDatabase()
{
	EXEC SQL ROLLBACK WORK RELEASE;
}

void getdbinfo(char uname[64],char pword[64])
{
	EXEC SQL BEGIN DECLARE SECTION;
	char * username;
	char * password;
	char * database=DATABASE;
	int dType,htID;
	char tpName[50],tName[50];
	EXEC SQL END DECLARE SECTION;
	username=strdup(uname);
	password=strdup(pword);
	if(cdb_OpenDatabase(username,password,database)==0)
		printf("数据库打开成功...\n");
	else{
		printf("数据库打开失败...\n");
		exit(1);
	}
	EXEC SQL DECLARE cs_ct CURSOR FOR select TYPE_ID,TYPE_NAME,TABLE_NAME,HTYPE_ID from DEVICETYPE;
	EXEC SQL OPEN cs_ct;
	while(1){		
		EXEC SQL FETCH cs_ct into:dType,:tpName,:tName,:htID;
		if(sqlca.sqlcode==1403 ) break;
		if(sqlca.sqlcode==-1002 ) {
			printf("devtype devid db fetch error\n");
			break;
		}
		printf("dType=%d,tpName=%s,tName=%s,htID=%d\n",dType,tpName,tName,htID);
	}
	cdb_CommitDatabase();
}
void sqlerror()
{
	EXEC SQL WHENEVER SQLERROR CONTINUE;
	printf("\noracle error detected:\n");
	printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
	EXEC SQL ROLLBACK RELEASE;
	exit(-1);
}

int main(int argc,char** argv)
{
	getdbinfo(USERNAME,PASSWORD);
	exit(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -