Unix 数据库连接的分段故障pro*c代码
我编写了简单的pro*c程序来检查数据库连接。代码是:Unix 数据库连接的分段故障pro*c代码,unix,oracle-pro-c,Unix,Oracle Pro C,我编写了简单的pro*c程序来检查数据库连接。代码是: int main() { char *conn_string = "IDA/IDA@DBISPSS"; int x = 10; printf("value of x is before db connection %d\n",x); printf(" conn_string %s \n",conn_string); EXEC SQL CONNECT :conn_string; EXEC SQL
int main()
{
char *conn_string = "IDA/IDA@DBISPSS";
int x = 10;
printf("value of x is before db connection %d\n",x);
printf(" conn_string %s \n",conn_string);
EXEC SQL CONNECT :conn_string;
EXEC SQL SELECT 1 INTO :x FROM DUAL;
printf("value of x is %d\n",x);
return 0;
}
我执行了以下命令来创建pro*c代码的可执行(test_connection)
proc test_connection.pc
cc -I${ORACLE_HOME}/precomp/public -c test_connection.c
cc test_connection.o -o test_connection -L$ORACLE_HOME/lib -lclntsh
当我执行test_connection exe时,输出是
value of x is before db connection 10
conn_string IDA/IDA@DBISPSS
Segmentation fault
但同样的代码在另一台linux机器和solaris机器上运行良好
为什么会抛出分段错误 我在HPUX 11.11/Oracle 11中进行了测试,工作正常。我看不出任何问题,但请尝试一些更改:
EXEC SQL BEGIN DECLARE SECTION;
int x = 0;
EXEC SQL END DECLARE SECTION;
EXEC SQL BEGIN DECLARE SECTION;
char *user = "abc", *password = "123", *database="base";
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE BASE_HANDLE DATABASE;
...
EXEC SQL CONNECT :user IDENTIFIED BY :password AT BASE_HANDLE USING :database;
...
EXEC SQL AT BASE_HANDLE SELECT 1...
printf(“此处1”)
在EXEC-SQL-CONNECT…
和EXEC-SQL-SELECT…
之间,查看抛出SEGFAULT的位置我有这个问题,再怎么摆弄我的消息来源也没有什么不同。最终起作用的是,我重新初始化了我的所有库,以确保Oracle只能访问库的32位版本。Oracle似乎不知何故连接到了一个64位库。只有删除对任何库或可执行文件(32位版本除外)的所有引用才有效。这包括运行32位版本的Pro*C。我仍然遇到分段错误。但没有生成核心文件。我在SQL CONNECT前后插入了打印语句。执行SQL_CONNECT之前的打印,但执行SQL CONNECT之后的打印。我想是SQL CONNECT出现了一些问题。但是我想没有人不能解释EXEC SQL。。有什么问题吗?是的。我们无法翻译。我在想……
Oracle的库版本在所有系统中都是一样的吗?您是在为earch系统处理二进制文件还是重新编译?我已经对lib的版本9和11有了问题。它在安装了oracle11g的系统(即其数据库服务器)上运行良好。但是问题出现在我们安装Oracle11g客户端的机器上。另一台工作正常的机器是Solaris,其中使用oracle 10 g客户端连接到11g数据库。不确定库是否有问题。此外,在出现分段错误的机器上,我可以使用sqlplus连接到数据库。因此,从linux服务器到db在连接方面没有问题。但是pro*c代码不起作用。