1. 程式人生 > >使用PRO*C連結Oracle資料庫步驟及問題

使用PRO*C連結Oracle資料庫步驟及問題

下載Client-server安裝包

官方下載路徑:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

使用PRO*C連結Oracle資料庫步驟及問題

建議下載RPM包,方便安裝。

註明: Base下的Basic Package和Basic Light Package是相同的安裝包,下載一個就行。

下載Precompiler :

官方下載路徑:http://www.oracle.com/technetwork/topics/precomp-112010-084940.html

安裝RPM包

以安裝PROC為例:

安裝完成後,執行proc -v出現錯誤:

解決辦法:

在末尾增加一行 /usr/lib/oracle/18.3/client64/lib/
執行

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檔案

錄入程式碼

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sqlca.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\n", title, salary);
  EXEC SQL COMMIT RELEASE;
}

PROC編譯

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

生成檔案

GCC編譯

直接GCC編譯,發生錯誤:

[[email protected] 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/client64/lib -lclnts

正確的編譯命令:

編譯成功,生成可執行檔案。