首页>计算机>Oracle认证>应用技术>正文
思科应用技术:VC下利用Pro*C开发Oracle接口

www.zige365.com 2008-8-18 15:58:52 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
/* 子程序 */
/* 连接子程序 connect() */
void connect()
{
  EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR username[10], password[10], server[10];
  EXEC SQL END DECLARE SECTION;
  /* 输入用户名、口令以及服务器名 */
  printf("\n输入用户名:");
  gets(username.arr);
  username.len=(unsigned short)strlen((char *)username.arr);
  printf("\n输入口令:");
  gets(password.arr);
  password.len=(unsigned short)strlen((char *)password.arr);
  printf("\n输入服务器名:");
  gets(server.arr);
  server.len=(unsigned short)strlen((char *)server.arr);
  /* 连接到Oracle服务器上 */
  EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
  printf("\n以用户%s成功地连接到了服务器%s上!\n", username.arr, server.arr);
}
/* 断开连接子程序 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:salary_ind
  FROM auths
  WHERE author_code = :author_code;
  /* 根据指示变量的值来确定该作家的工资是否为空。*/
  if (salary_ind ==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);
}

  3、建表和插入数据记录

  上述示例程序如要正确运行,还需以Oracle库的合法用户登录,并创建AUTHS表和插入一些数据记录。建表文件、建表命令和插入数据记录的示例命令如下所述。这里叙述的工作完成后,上节生成的可执行文件才能正确运行。

  REM 以下为建表文件auths.SQL

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);

本新闻共4页,当前在第4页  1  2  3  4  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
思科应用技术:oracle里面使用临时表解决表冲突一例
思科应用技术:提高ORACLE数据库的查询统计速度
思科应用技术:浅谈Oracle中优化SQL的原则
思科应用技术:windows优化系统后oracle9i本地连接失败
思科应用技术:在Oracle中获取磁盘空间的使用情况
思科应用技术:Oracle中Decode()函数使用技巧