/********************************************************************
* 功能:
* 该程序先与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语句:实现都数据库进行操作