SuSE LinuxでC / C ++を使用してOracle DBMSからデータを取得する

こんにちはハラマン!



先日、SuSE LinuxでC / C ++を使用してOracle DBMSからデータを取得する必要に直面しました



その前は、他の言語(Perl、PHP、sh)から同様のことを繰り返していましたが、Cからはこれまでにありませんでした。

Oracleに接続できるすべての利用可能なツールの中で、procをプリコンパイルする方法を決めました。そのバイナリはOracleクライアントの基本パッケージに含まれています。





色の暴動が発生するシステム:

vmotp#cat / etc / SuSE-release

SUSE Linux Enterprise Server 11(i586)

バージョン= 11

PATCHLEVEL = 0

+

oracle.client VER:10.2.0.1.0





データベース自体は別のマシン上にあります。 サーバーバージョン:9.0.2(古いことは知っていますが、履歴レプリカと一時テーブルの単純なベースとしてのみ機能します)



まず、クエリ結果を表示する「Hello World」のような例を作成しましょう。

SELECT 12345,'TEST STRING' FROM dual;







次の内容のファイルtest_ora.pcを作成します



#include <ctype.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <string.h>



#define ORA_PARAM " ORACLE_LOGIN/ORACLE_PASS@ORACLE_SID " /* */



EXEC SQL BEGIN DECLARE SECTION; /* END DECLARE SECTION , Oracle*/

static int ora_i; /* INT */

static VARCHAR ora_str[20]; /* CHAR */

static VARCHAR connect_str[100]; /* */

EXEC SQL END DECLARE SECTION;



EXEC SQL INCLUDE SQLCA; /* SQLCA ( ) */



int main( int argc, char* argv[] )

{

char str[21]; /* CHAR */

memset(str,0,sizeof(str)); /* */

connect_str.len = sprintf(connect_str.arr,ORA_PARAM); /* */

EXEC SQL CONNECT :connect_str; /**/

EXEC SQL WHENEVER SQLERROR CONTINUE;

EXEC SQL SELECT 12345,'TEST STRING' INTO :ora_i,:ora_str FROM dual; /* , */

sprintf( str, "%*.*s", ora_str.len, ora_str.len, ora_str.arr ); /* CHAR C */

printf("\ni=[%d], str=[%s]\n", ora_i, str ); /* */

return 0;

} /* end of main() */









ここで、ファイルをprocユーティリティに「フィード」する必要があります。デフォルトでは、パスは$ ORACLE_HOME / bin /にあります。

/opt/oracle/product/11gR1/db/bin/proc CODE=ANSI_C include=/opt/oracle/product/11gR1/db/lib include=/usr/lib/gcc/i586-suse-linux/4.3/include/ ireclen=4800 oreclen=4800 select_error=no release_cursor=no hold_cursor=yes ltype=none cpp_suffix=c USERID= ORACLE_LOGIN/ORACLE_PASS@ORACLE_SID SQLCHECK=SEMANTICS iname=test_ora.pc;









cc test_ora.c -L/opt/oracle/product/11gR1/db/lib /opt/oracle/product/11gR1/db/lib/libclntsh.so /opt/oracle/product/11gR1/db/lib/libsqlplus.a -o test_ora;







結果のファイルを実行し、フォーカスが成功したことを確認します。

vmotp$ ./test_ora



i=[12345], str=[TEST STRING]

vmotp$









PS。 私は友達のリクエストでこの記事を公開します。 まだHabrにログインしていないユーザー、招待がまだある場合は、共有してください(lanarion(at)gmail.com)。



All Articles