之前在《VC6.0下搭建proc开发环境》文章中有讲到如何在Windows平台下,在Visual C++ 6.0开发工具上如何搭建Proc的开发环境。这里讲一下如何在Linux下搭建Proc开发环境,同时给出一个简单的例子
如何安装Oracle之类的就不说了,下面的流程是建立在你安装好Oracle的基础上的,Linux下如何安装Oracle请自行搜索
使用Oracle用户在Linux平台进行测试
准备测试数据
先创建一张测试数据表,并且在表中插入2条测试数据
create table tuser(username varchar(10), userdesc varchar(100));
insert into tuser t values('xumenger', 'www.xumenger.com');
insert into tuser t values('test', 'www.test.com');
配置.bash_profile文件
.bash_profile在~目录下,下面的内容需要根据自己环境上的安装情况进行适应性调整
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export TMP=/tmp
export TMPDIR=$TMP
export LD_ASSUME_KERNEL=2.6.32
export ORACLE_BASE=/home/oracle/oracle
export ORACLE_HOME=/home/oracle/oracle/product/10201
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_OWNER=oracle
export LANG=en_US
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=trade
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin:/sbin
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$ORACLE_HOME/lib
export ORA_NLS33=$ORACLE_HOMe/nls/admin/data
export CLASSPATH=$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
配置pcscfg.cfg文件
pcscfg.cfg文件的目录为:$ORACLE_HOME/precomp/admin/pcscfg.cfg
主要是在该文件中加上proc的库文件及oracle的home目录
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.0/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.2/include,/usr/lib64/gcc/x86_64-suse-linux/4.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/stddef.h)
ltype=short
define=__x86_64__
编写测试程序
实现如下测试程序
/*test.pc*/
#include
#include
EXEC SQL INCLUDE sqlca;
//在这里可以声明Oracle数据类型
EXEC SQL BEGIN DECLARE SECTION;
varchar username[20];
varchar password[20];
EXEC SQL END DECLARE SECTION;
int main(void)
{
strcpy(username.arr, "trade");
username.len = strlen("trade");
strcpy(password.arr, "trade");
password.len = strlen("trade");
//执行下面SQL和数据库建立连接
EXEC SQL CONNECT :username IDENTIFIED By :password;
if(0 != sqlca.sqlcode){
printf("login failed!\n");
return -1;
}
printf("login success!\n");
//以下测试需要依赖于数据库中只有两条数据
EXEC SQL BEGIN DECLARE SECTION;
char name[2][11];
char desc[2][101];
EXEC SQL END DECLARE SECTION;
EXEC SQL select t.username,
t.userdesc
into
:name,
:desc
from tuser t
where rownum in (1,2);
if(0 == sqlca.sqlerrd[2]){
printf("查询tuser表出错!\n");
return -1;
}
int i;
for(i=0; i<2; i++){
printf("user%d, name=%s, desc=%s\n", i, name[i], desc[i]);
}
return 0;
}
编译test.pc程序

在当前目录下生成test.lis和test.c文件
编译test.c程序

因为编译时要用到Oracle库,该库不在默认路径,需要手动指定
$ gcc test.c -o test -L /home/oracle/oracle/product/10201/lib/ -l clntsh
测试程序

程序出现无响应
补充说明,中间出现过test程序无响应的情况,解决方法如下
$ ps -A | grep test
15074 pts/3 00:00:00 test
//查看该进程的PID
$ kill 15074
//强杀进程
另外可以使用top命令查看当前系统中的进程信息,类似于Windows下的任务管理器
另外,为什么进程无法退出来,其实完全可以拿GDB来调试分析(阻塞?死锁?死循环?)
经过排查发现是在登录的地方卡住导致的,使用PLSQL登录可以复现这个问题

并不是这个测试程序导致的,而是其他人对数据库进行压力测试导致的,最粗暴的解决方法就是重启Linux
重启后执行下面的命令
$ sqlplus ‘/as sysdba’
SQL> startup
但是报错:startupORA-27102: out of memory。然后参考《Oracle启动报错ORA-27102解决》解决问题
然后启动数据库监听
lsnrctl start
如此,可成功登录Oracle!
参考资料
本文详细介绍如何在Linux环境下配置Proc开发环境,并提供一个简单的测试示例,包括配置.bash_profile和pcscfg.cfg文件的方法。
3575

被折叠的 条评论
为什么被折叠?



