Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 数据库连接的分段故障pro*c代码_Unix_Oracle Pro C - Fatal编程技术网

Unix 数据库连接的分段故障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

我编写了简单的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 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中进行了测试,工作正常。我看不出任何问题,但请尝试一些更改:

  • 将“x”声明到声明节中:

    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代码不起作用。