#define USERNAME "user1"
#define PASSWORD "user1"
#include <stdio.h>
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR UserName[20];
VARCHAR PassWord[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
void Query(), Insert(), Update(), Delete();
main()
{
char operate[5];
/* Login Oracle */
strcpy(UserName.arr, USERNAME);
UserName.len = strlen(UserName.arr);
strcpy(PassWord.arr, PASSWORD);
PassWord.len = strlen(PassWord.arr);
EXEC SQL WHENEVER SQLERROR GOTO logon_error;
EXEC SQL CONNECT :UserName IDENTIFIED BY :PassWord;
printf("\nConnected to ORACLE as user: %s\n", UserName.arr);
for(;;)
{
/* Create Menu */
printf("\n*****************************");
printf("\n* *");
printf("\n* MainMenu: *");
printf("\n* 1. Query *");
printf("\n* 2. Insert *");
printf("\n* 3. Update *");
printf("\n* 4. Delete *");
printf("\n* 5. Exit *");
printf("\n* *");
printf("\n*****************************");
printf("\n Enter Selection: \n");
scanf("%s", operate);
switch(operate[0])
{
case '1': Query();
break;
case '2': Insert();
break;
case '3': Update();
break;
case '4': Delete();
break;
case '5': break;
default: printf("\n\n invalid selection\n");
break;
}
if (operate[0] == '5')
break;
}
EXEC SQL COMMIT RELEASE;
printf("\n\n very good! \n\n");
exit(0);
logon_error:
printf("\n invalid UserName/PassWord\n");
printf("\n %.70s \n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK RELEASE;
exit(1);
}
/*******************************************************************/
void Query()
{
EXEC SQL BEGIN DECLARE SECTION;
int emp_number;
VARCHAR emp_name[20];
VARCHAR job[20];
short ind_job;
EXEC SQL END DECLARE SECTION;
char empnum[8];
printf("\n\n Enter Employee number (press RETURN to abort):");
scanf("%s", empnum);
if (!strcmp(empnum, " "))
{
printf("\n");
return;
}
/* find emp info */
emp_number = atoi(empnum);
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
EXEC SQL SELECT ENAME, JOB INTO :emp_name, :job:ind_job
FROM EMP
WHERE EMPNO = :emp_number;
/* print emp info */
emp_name.arr[emp_name.len] = '\0';
switch (ind_job)
{
case -1: strcpy(job.arr, "NULL");
job.len = strlen(job.arr);
break;
case 0: job.arr[job.len] = '\0';
break;
default: if (ind_job > 0)
printf("\n\n WARNING: Job truncated. \n");
break;
}
printf("\n\n Number EmployeeName Job \n");
printf("------------------------------\n");
printf(" %-8d %-12s %-5s \n", emp_number, emp_name.arr, job.arr);
return;
notfound:
printf("\n\n WARNING: Employee %d does not exist. \n", emp_number);
return;
sqlerror:
printf("\n %.70s \n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
exit(1);
}
/*******************************************************************/
void Insert()
{
EXEC SQL BEGIN DECLARE SECTION;
int emp_number;
VARCHAR emp_name[20];
VARCHAR job[20];
short ind_job;
EXEC SQL END DECLARE SECTION;
char empnum[8];
printf("\n\n Enter employee number (press RETURN to abort):");
scanf("%s", empnum);
if (!strcmp(empnum, " "))
{
printf("\n");
return;
}
emp_number = atoi(empnum);
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL WHENEVER NOT FOUND GOTO resume;
/* find emp info */
EXEC SQL SELECT ENAME INTO :emp_name
FROM EMP
WHERE EMPNO = :emp_number;
printf("\n\n WARNING: Employee %d already exists. \n, emp_number");
return;
resume:
printf("\n\n Enter employee name: ");
scanf("%s", emp_name.arr);
emp_name.len = strlen(emp_name.arr);
printf("\n\n Enter job: ");
scanf("%s", job.arr);
job.len = strlen(job.arr);
ind_job = 0;
if (!strcmp(job.arr, " "))
ind_job = -1;
/* Insert Emp Info */
EXEC SQL INSERT INTO EMP(EMPNO, ENAME, JOB)
VALUES(:emp_number, :emp_name, :job:ind_job);
printf("\n\n Employee %d inserted. \n", emp_number);
EXEC SQL COMMIT;
return;
sqlerror:
printf("\n%.70s\n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
exit(1);
}
/*******************************************************************/
void Update()
{
EXEC SQL BEGIN DECLARE SECTION;
int emp_number;
VARCHAR emp_name[20];
VARCHAR job[50];
short ind_job;
EXEC SQL END DECLARE SECTION;
char empnum[8];
printf("\n\n Enter employee number (press RETURN to abort):");
scanf("%s", empnum);
if (!strcmp(empnum, " "))
{
printf("\n");
return;
}
emp_number = atoi(empnum);
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
/* find emp info */
EXEC SQL SELECT ENAME, JOB INTO :emp_name, :job:ind_job
FROM EMP
WHERE EMPNO = :emp_number;
emp_name.arr[emp_name.len] = '\0';
switch (ind_job)
{
case -1: strcpy(job.arr, "NULL");
job.len = strlen(job.arr);
break;
case 0: job.arr[job.len] = '\0';
break;
default: if (ind_job > 0)
printf("\n\nWARNING: Job truncated.\n");
break;
}
printf("\n\n Number Employee Name job \n");
printf("------------------------------\n");
printf("%-9d%-15s%-8s\n", emp_number, emp_name.arr, job.arr);
printf("\n Enter new employee name: ");
scanf("%s", emp_name.arr);
emp_name.len = strlen(emp_name.arr);
printf("\n\n Enter new job: ");
scanf("%s", job.arr);
job.len = strlen(job.arr);
ind_job = 0;
if (!strcmp(job.arr, " "))
ind_job = -1;
/* Update emp Info */
EXEC SQL UPDATE EMP
SET ENAME = :emp_name,
JOB = :job:ind_job
WHERE EMPNO = :emp_number;
printf("\n\nEmployee %d updated. \n", emp_number);
EXEC SQL COMMIT;
return;
notfound:
printf("\n\n WARNING: Employee %d does not exist. \n", emp_number);
return;
sqlerror:
printf("\n %.70s \n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
exit(1);
}
/*******************************************************************/
void Delete()
{
EXEC SQL BEGIN DECLARE SECTION;
int emp_number;
EXEC SQL END DECLARE SECTION;
char empnum[8];
printf("\n\n Enter employee number (press RETURN to abort):");
scanf("%s", empnum);
if (!strcmp(empnum, " "))
{
printf("\n");
return;
}
emp_number = atoi(empnum);
/* delete emp info */
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
EXEC SQL DELETE
FROM EMP
WHERE EMPNO = :emp_number;
printf("\n\n Employee %d deleted. \n", emp_number);
EXEC SQL COMMIT;
return;
notfound:
printf("\n\n WARNING: Employee %d does not exist. \n", emp_number);
return;
sqlerror:
printf("\n %.70s \n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
exit(1);
}
/*******************************************************************/
Oracle_ProC.rar_linux oracle_linux proc *c_linux proc oracle_ora
版权申诉
193 浏览量
2022-09-24
02:44:08
上传
评论
收藏 11KB RAR 举报
钱亚锋
- 粉丝: 86
- 资源: 1万+
最新资源
- 上市公司-人工智能的采纳程度面板数据(2003-2021年).xlsx
- 第5章spring-mvc请求映射处理
- 2023-04-06-项目笔记 - 第一百十六阶段 - 4.4.2.114全局变量的作用域-114 -2024.04.27
- app-release.apk.1
- soap json 等系列化方式
- c++的五子棋代码,在vs6.0上完美运行
- 基于Javaee的影视创作论坛的设计与实现.rar
- Python导出Mysql数据字典(部分表或全表)
- Java工具类实现输入一个路径,强创建路径、并且鉴权目标路径是否具备修改权限,用于增强程序的健壮性与稳定性,快速开发!
- 资源【STM32+HAL】三轴按键PS2摇杆
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈