Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

segmentation fault pro*c code for database connection

I wrote simple pro*c program to check database connectivity. The code is :

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;
}

Following commands I executed to create exectuable (test_connection) of pro*c code

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

and when I executed test_connection exe,the output is

value of x is before db connection 10
conn_string IDA/IDA@DBISPSS
Segmentation fault

But the same code workes well in another linux machine and solaris machine.

Why segmentation fault is thrown?

like image 378
missingsemicolon Avatar asked Sep 01 '26 10:09

missingsemicolon


1 Answers

I tested in HPUX 11.11/Oracle 11 and work ok. I don't see any problem, but try some changes:

  1. Declare 'x' into a DECLARE SECTION:

    EXEC SQL BEGIN DECLARE SECTION;
    int x = 0;
    EXEC SQL END DECLARE SECTION;
    
  2. Try this connection command:

    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...
    
  3. Insert a printf("here 1"); between EXEC SQL CONNECT... and EXEC SQL SELECT ... to see where SEGFAULT is thrown.

like image 89
André A. G. Scotá Avatar answered Sep 04 '26 15:09

André A. G. Scotá



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!