📄 exam0.pc
字号:
/* exam01.pc a·¢Oracleóú3ìDòùày */
/* μ÷£o±3ìDòééüóPROCa·¢Oracleaóúμ±à3ììμ£í¨1yòAUTHS
* ±íêè×÷ò′ú£2éˉ×÷òD°1¤×ê£DD°ó|¨±í¢2èêyY2¢ìá£*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* °üoSQLí¨£üóóú′|àí′íó£*/
#include <sqlca.h>
void connect(); /* áóμOracle Server */
void disconnect(); /* aμOracle Serverμáó */
void sql_error(char *); /* ′|àí′íó±ú */
void select(); /* 2éˉ×ó3ìDò */
extern sqlglm(char *,int *,int *);
/* ÷3ìDò */
void main()
{
/* °2×°′íó′|àí±ú */
EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle′íó--\n");
/* áóμêyYa */
connect();
/* ′DD2éˉ */
select();
/* aêyYaáó */
disconnect();
}
/* ×ó3ìDò */
/* áó×ó3ìDò connect() */
void connect()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20], password[10], server[10];
EXEC SQL END DECLARE SECTION;
strcpy (username.arr,"dbcrm/dbcrmsd@crmdb");
/*EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;*/
EXEC SQL connect :username;
printf("\n连接的数据库是%s\n", username.arr);
}
/* aáó×ó3ìDò disconnect() */
void disconnect()
{
char temp;
printf("\n是否在断开连接前提交所有事务(Y/N)");
scanf("%c", &temp);
fflush(stdin);
if(temp !='Y' && temp != 'y')
{
/* 回退事务,断开连接。 */
EXEC SQL ROLLBACK WORK RELEASE;
printf("\n 回退事务,断开连接。\n\n");
}
else
{
/* 提交事务,断开连接。 */
EXEC SQL COMMIT WORK RELEASE;
printf("\n提交事务,断开连接。\n\n");
exit(1);
}
}
/* 查询子程序 select()
* 首先输入作家代码,然后查询作家姓名和工资。*/
void select()
{
EXEC SQL BEGIN DECLARE SECTION;
char author_code[8], name[10];
float salary;
short salary_ind;
EXEC SQL END DECLARE SECTION;
printf("\n输入作家代码: ");
gets(author_code);
/* 查询作家姓名和工资 */
EXEC SQL SELECT name, salary INTO :name,:salary
FROM auths
WHERE author_code = :author_code;
/*根据指示变量的值来确定该作家的工资是否为空。*/
if (salary >0)
{
printf("\n作家代码\t作家姓名\t作家工资\n");
printf("--------\t--------\t--------\n");
printf("%8s\t%8s\t%8.2f\n", author_code, name, salary);
}
else
{
printf("作家%s的工资未录入,为空值!\n", name);
}
}
/* 错误处理子程序 sql_error() */
void sql_error(char *msg)
{
char err_msg[128];
size_t buf_len, msg_len;
/* 出现SQL错误,继续往下执行。 */
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\n%s\n", msg);
buf_len=sizeof(err_msg);
/* 调用函数sqlglm()获得错误消息。 */
sqlglm(err_msg, &buf_len, &msg_len);
printf("%.*s\n", msg_len, err_msg);
/* 回退事务,断开连接,退出程序。 */
EXEC SQL ROLLBACK RELEASE;
exit(EXIT_FAILURE);
}
/*建表语句
DROP TABLE auths CASCADE CONSTRAINTS
/
CREATE TABLE auths(
AUTHOR_CODE VARCHAR2(8) NOT NULL,
NAME VARCHAR2(10),
BIRTHDATE DATE,
ENTRY_DATE_TIME DATE,
SALARY NUMBER(7,2),
remark VARCHAR2(255))
/
REM 下一行为在PL/SQL环境中运行建表文件的命令
REM @ E: \ PROCW \ Exam01 \ auths.sql
REM 下一行为在PL/SQL环境中向auths表插入数据的命令,插入后应提交(COMMIT)!
REM INSERT INTO auths(author_code,name,salary) VALUES('A00001','王达琳',1200);
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -