最近一直再研究如何用proc开发对接oracle数据的知识,现在算是告一段落
本文只要是给大家一个了解怎么在proc的开发中对远程oracle数据的链接、断开、和基本操作。
对本地的oracle数据库来说理论上应该也是适用的。
首先说下过程中遇到的问题:
1.能连接上远程的oracle数据库,但在操作数据库时提示未登录
2.在断开连接时同样提示未登录
问题分析:
其实这两个问题实质上是同一个问题,由于我连接数据库的时候是用的IP和端口连接的。所以后续的操作没有指定实例(数据库)导致提示我未登录
解决方法:
连接数据库的时候指定实例(数据库),后续的操作中指定实例(数据库)就OK啦
在此提示下:在proc的开发中,proc编译器是挑空格的。所以大家在开发是要注意这一点,不然很可能导致你的代码写的对的,但是编译的时候可能出现莫名其妙的问题。
下面是示例代码:
#include <stdio.h>
#include <sqlca.h>
#include <oraca.h>
int main()
{
int lcount = 0;
char user[]="wangly";
char passwd[]="123456";
char host[]= "172.16.15.216:1523";
char dbname[]="orcl";
char connect_string[]="orcl";
char tablename[]= "TBL_ALARM_INFO";
EXEC SQL CONNECT :user IDENTIFIED BY :passwd AT :dbname USING :connect_string;
if (sqlca.sqlcode == 0)
{
printf("Connect successful!\n");
}
else
{
printf("connect err: %s\n",sqlca.sqlerrm.sqlerrmc);
return -1;
}
EXEC SQL AT :dbname SELECT COUNT(*) INTO :lcount FROM TBL_ALARM_INFO;
if (sqlca.sqlcode == 0)
{
printf("lcount=%d\n", lcount);
}
else
{
printf("select err:%s\n",sqlca.sqlerrm.sqlerrmc);
return -1;
}
EXEC SQL AT :dbname ROLLBACK WORK RELEASE;
if (sqlca.sqlcode == 0)
{
printf("Disconnect successful!\n");
}
else
{
printf("commit err: %s\n",sqlca.sqlerrm.sqlerrmc);
return -1;
}
return 0;
}