PRO*CリンクOracleデータベースの全プロセス


PRO*CはOracleが提供するアプリケーション専用の開発ツールで、C言語をホスト言語とし、CプログラムにSQL文を埋め込み、データベース操作を行うことができます.
Client-serverインストールパッケージのダウンロード
公式ダウンロード:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
PRO*C链接Oracle数据库全流程_第1张图片
RPMパッケージをダウンロードすることをお勧めします.インストールしやすいです.
注記:Baseの下のBasic PackageとBasic Light Packageは同じインストールパッケージで、1つダウンロードすればいいです.
Precompilerをダウンロード:
这里写图片描述
公式ダウンロード:http://www.oracle.com/technetwork/topics/precomp-112010-084940.html
PRO*C链接Oracle数据库全流程_第2张图片
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’      

解決策:
  • ECPGget_sqlca’未定義の参照コンパイル時に増加-lecpg
  • 「sqlcxt」未定義の参照コンパイル時に-L/usr/lib/oracle/18.3/client 64/lib-lclnts
  • を追加
    正しいコンパイルコマンド:
    [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

    コンパイルに成功し、実行可能ファイルを生成しました.