PRO*CリンクOracleデータベースの全プロセス
9623 ワード
PRO*CはOracleが提供するアプリケーション専用の開発ツールで、C言語をホスト言語とし、CプログラムにSQL文を埋め込み、データベース操作を行うことができます.
Client-serverインストールパッケージのダウンロード
公式ダウンロード:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
RPMパッケージをダウンロードすることをお勧めします.インストールしやすいです.
注記:Baseの下のBasic PackageとBasic Light Packageは同じインストールパッケージで、1つダウンロードすればいいです.
Precompilerをダウンロード:
公式ダウンロード:http://www.oracle.com/technetwork/topics/precomp-112010-084940.html
RPMパッケージのインストール
インストールPROCの例:
インストールが完了すると、proc-vを実行中にエラーが発生します.
解決策:
末尾に1行/usr/lib/oracle/18.3/client 64/lib/実行を追加
PCファイルのコンパイル
PCファイルの作成
入力コード
PROCコンパイル
ファイルの生成
GCCコンパイル
直接GCCコンパイル、エラー発生:
解決策: ECPGget_sqlca’未定義の参照コンパイル時に増加-lecpg 「sqlcxt」未定義の参照コンパイル時に-L/usr/lib/oracle/18.3/client 64/lib-lclnts を追加
正しいコンパイルコマンド:
コンパイルに成功し、実行可能ファイルを生成しました.
Client-serverインストールパッケージのダウンロード
公式ダウンロード:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
RPMパッケージをダウンロードすることをお勧めします.インストールしやすいです.
注記:Baseの下のBasic PackageとBasic Light Packageは同じインストールパッケージで、1つダウンロードすればいいです.
Precompilerをダウンロード:
公式ダウンロード:http://www.oracle.com/technetwork/topics/precomp-112010-084940.html
RPMパッケージのインストール
インストールPROCの例:
[zhaojq@ Oracle~]$ rpm -ivh oracle-instantclient18.3-precomp-18.3.0.0.0-1.x86_64.rpm
... ################################# [100%]
/ ...
1:oracle-instantclient18.3-precomp-################################# [100%]
インストールが完了すると、proc-vを実行中にエラーが発生します.
[zhaojq@ Oracle~]$ proc -v
proc: error while loading shared libraries: libclntsh.so.18.1: cannot open shared object file: No such file or directory
解決策:
[zhaojq@ Oracle~]$ vi /etc/ld.so.conf
末尾に1行/usr/lib/oracle/18.3/client 64/lib/実行を追加
[zhaojq@ Oracle~]$ ldconfig
[zhaojq@ Oracle~]$ proc -v
Pro*C/C++: Release 18.0.0.0.0 - Production on Thu Aug 2 10:55:09 2018
Version 18.3.0.0.0
PCファイルのコンパイル
PCファイルの作成
[zhaojq@ Oracle~]$ touch connect.pc
[zhaojq@ Oracle~]$ vim connect.pc
入力コード
#include.h>
#include.h>
#include.h>
#include.h>
void main()
{
char username[10], password[10], server[10];
char name[11], title[10];
float salary;
printf("input name:");
gets(username);
printf("input pass:");
gets(password);
printf("input server:");
gets(server);
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
printf("input empoyee name:");
gets(name);
EXEC SQL SELECT sal, job INTO :salary, :title FROM emp WHERE UPPER(ename) = UPPER(:name);
printf("title:%s, salary:%6.2f
", title, salary);
EXEC SQL COMMIT RELEASE;
}
PROCコンパイル
[zhaojq@ Oracle~]$ proc iname=connect.pc parse=full include=/usr/local/include/ include=/usr/include/
Pro*C/C++: Release 18.0.0.0.0 - Production on Thu Aug 2 09:51:53 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
System default option values taken from: /usr/lib/oracle/18.3/client64/lib/precomp/admin/pcscfg.cfg
ファイルの生成
[zhaojq@ Oracle~]$ ls
connect.pc connect.c connect.lis
GCCコンパイル
直接GCCコンパイル、エラー発生:
[root@vio062033 Oracle]# gcc -o connect connect.c
connect.c: ‘main’ :
connect.c:155:3: : ‘gets’( /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(username);
^
connect.c:157:3: : ‘gets’( /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(password);
^
connect.c:159:3: : ‘gets’( /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(server);
^
connect.c:217:3: : ‘gets’( /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(name);
^
/tmp/ccOHKOZ3.o: ‘main’ :
connect.c:(.text+0x22): :the `gets' function is dangerous and should not be used.
connect.c:(.text+0xa7): ‘ECPGget_sqlca’
connect.c:(.text+0x2ae): ‘sqlcxt’
connect.c:(.text+0x336): ‘ECPGget_sqlca’
connect.c:(.text+0x50b): ‘sqlcxt’
connect.c:(.text+0x57b): ‘ECPGget_sqlca’
connect.c:(.text+0x5b8): ‘sqlcxt’
解決策:
正しいコンパイルコマンド:
[zhaojq@ Oracle~]$ gcc -o connect connect.c -L/usr/lib/oracle/18.3/client64/lib -lclntsh -lecpg
[zhaojq@ Oracle~]$ ls
connect connect.pc connect.c connect.lis
コンパイルに成功し、実行可能ファイルを生成しました.