Pro*C初识

本文介绍了一个使用C语言编写的程序,该程序通过与Oracle数据库交互来查询特定职员的信息,如姓名、工资和佣金等,并展示了如何处理错误及断开数据库连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
/********************************************************************
* 功能:
* 该程序先与oracle相连接,然后提示用户输入一个职员号,
* 最后根据该职员号查询数据库,查询出该职员的名字 工资 附加工资,
* 并显示结果。
*当输入职员号为0时,程序结束
*********************************************************************/

/*******************************外部说明***************************/

#include <stdio.h>

/*      说明段,说明sql变量   */
EXEC SQL BEGIN DECLARE SECTION;

	VARCHAR username[20];
	VARCHAR password[20];
EXEC SQL END DECLARE SECTION;

/*       SQL 通讯区说明     */
EXCE SQL INCLUDE sqlca;

/*      C函数说明,错误处理    */
void sqlerror();

/***************程序体******************/
main()
{
	/****内部说明*****/
	/*内部说明段,说明局部sql变量*/
	EXEC SQL BEGIN DECLARE SECTION;
		int emp_number;
		VARCHAR emp_name[15];
		float salary;
		float commission;
	EXEC SQL END DECLARE SECTION;
	
	/*   C变量的说明   */
	int total_number;
	
	/* 登录到oracle*/
	strcpy(username.arr,"SCOTT"); /*用户名*/
	username.len=strlen(username.arr);
	
	strcpy(parrword.arr, "TIGER");/*口令*/
	password.len=strlen(password.arr);
	
	EXEC SQL WHENEVER SQL ERROR DO sqlerror();/*错误处理说明语句*/
	
	EXEC SQL CONNECT :username IDENTIFIED BY :password;/*连接到ORACLE 数据库管理系统*/
	
	printf("\n Connect to ORACLE as user: %s\n",username.arr);
	
	/* 循环查询职员信息*/
	total_number = 0;
	
	while(1)
	{
		emp_number=0;
		printf("\n Enter employee number ( 0 to quit) :");
		scanf("%d",&emp_number);
		
		if(emp_number == 0) break;
		
		/*查询语句*/
		EXEC SQL WHENEVER NOT FOUND GOTO notfound;
		EXEC SQL SELECT ENAME,SAL,COMM
				 INTO :emp_name,:salery,:connission
				 FROM EMP
				 WHERE EMPNO = :emp_number;
		/* 输出查询结果 */
		printf("\n\nEmployee\tSalary\tCommission\n");
		printf("------\t-------\t-------t\n");
	  emp_name.arr[emp_name.len]='\0';
	  
	  printf("%-8s\t%6.2f\t%6.2f\n",emp_name.arr,salary,commission);
	  total_number=total_number+1;
	  continue;
notfound:
		printf("\nNot a valid employee number - try again.\n");
	}
	printf("\n\nTotal number queried was: %d\n",total_number);
	printf("\nHave a goog day.\n");
	
	/* 结束处理,退出ORACLE系统 */
	EXEC SQL COMMIT WORK RELEASE;
	exit(0);
}

/*错误处理*/
void sqlerror()
{
	EXEC SQL WHENEVER SQLERROR CONTINUE;
	printf("\nORALCE error detected:\n");
	
	/*打印错误文本*/
	printf("\n%.70s \n",sqlca.sqlerrm.sqlerrmc);
	
	/*回滚事务*/
	EXEC SQL ROLLBACK RELEASE;
	exit(1);
}

 

该程序是由:外部声明和程序体两部分组成

外部声明主要说明程序中引用的外部变量和函数。其包括:说明段,通讯区,c函数。

     说明段:EXEC SQL BEGIN DECLARE SCTION 开始
                      类型说明语句,说明sql变量的类型
                     EXEC SQL END DECLARE SCTION  结束

     通信区:EXEC SQL INCLUDE sqlca  用于记录执行每条sql语句的状态信息

程序体由若干函数组成,其中一个主函数。每个函数有如下部分组成:

内部说明:说明函数内所用的局部变量,它的组成类似外部声明

C程序的可执行语句

嵌入式sql语句:实现都数据库进行操作

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值