PROC是ORACEL提供的编程接口之一,将过程化的C语言与非过程化的SQL语句结合,PROC连ORACLE小例子。

ORACLE客户端TNSNAME.ORA配置:

HS2008 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.71.128)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = HS2008)
    )
  )

先将PROC集成到VC环境,具体操作网上可查。

新建SQL SCRIPT FILE,可以.PC后缀。代码(OracleTest.pc):

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
using namespace std;

void connect()
{
  EXEC SQL BEGIN DECLARE SECTION;
  char username[20],password[20],server[20];
  EXEC SQL END DECLARE SECTION;

  cout << "输入数据库用户名:" << endl;
  gets(username);
  //username.len = strlen((char*)username.arr);
  cout << "输入密码:" << endl;
  gets(password);
  //password.len = strlen((char*)password.arr);
  strcpy(server,"HS2008");
  //server.len = strlen((char*)server.arr);

  EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
  if(sqlca.sqlcode == 0)
    cout << "数据库连接成功!" << endl;
  else
    cout << "数据库连接失败!" << endl;
}
void disconnect()
{
  fflush(stdin);
  EXEC SQL COMMIT WORK RELEASE;
  cout << "提交事务,断开连接!" << endl;
}
void sql_error();
void manipulate()
{
  EXEC SQL BEGIN DECLARE SECTION;
  char CompanyName[20];
  int InitDate;
  EXEC SQL END DECLARE SECTION;

  EXEC SQL SELECT company_name,init_date INTO :CompanyName,:InitDate FROM hs_user.sysarg  where rownum = 1;
  if(sqlca.sqlcode == 0)
  {
    cout << "company_name=" << CompanyName << ",init_date=" << InitDate << endl;
  }
  else
  {
    sql_error();
  }

}
void sql_error()
{
  char err_msg[200];
  int buf_len,msg_len;
  buf_len = sizeof(err_msg);
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  sqlglm(err_msg,&buf_len,&msg_len);
  cout << err_msg << ";sqlcode=" << sqlca.sqlcode << endl;
  EXEC SQL ROLLBACK RELEASE;
}
int main()
{
  connect();
  manipulate();
  disconnect();
  return 0;
}

经PRO*C预编译生成.C文件,可改为CPP后缀,添加进工程,进行编译,可进行。预编译后的代码(OracleTest.cpp):


/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int ma

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值