一般C語言連接oracle數(shù)據(jù)庫通過使用oracle提供的OCI接口和PROC編程接口兩種方式。
目前成都創(chuàng)新互聯(lián)公司已為成百上千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)絡空間、網(wǎng)站托管、企業(yè)網(wǎng)站設計、黃山區(qū)網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
OCI方式純粹是一些函數(shù)接口。
PROC是oracle提供的一種C與ORACLE SQL的混合編程。程序(以.pc為后綴)編好之后,使用oracle提供的proc預編譯程序,將pc文件編譯成c文件(這一過程,相當于將SQL轉(zhuǎn)換為OCI的接口),然后再使用c語言編譯器生成可以執(zhí)行文件。
OCI方式不容易入門,它擁有大量的接口函數(shù),要很快熟悉它,非常難。但OCI方式的編程效率很高。
porc方式簡單易用??捎糜趯π阅芤蟛惶叩捻椖?。
使用PL/SQL Developer連接Oracle:
?1. 下載32位Oracle InstantClient,并展開到某目錄,例如C:\instantclient-basic-nt-11.2.0.2.0;
?2. 將系統(tǒng)的tnsnames.ora拷貝到該目錄下;
?3. 在PLSQL Developer中設置Oracle_Home和OCI Library:
Tools?Preferences?Oracle?Connection:
Oracle_Home: C:\instantclient-basic-nt-11.2.0.2.0
OCI Library: C:\instantclient-basic-nt-11.2.0.2.0\oci.dll
?4. 在PLSQL Developer目錄下編輯如下bat文件,替換其快捷方式,啟動PLSQL Developer:
@echo off
set path=C:\instantclient-basic-nt-11.2.0.2.0
set ORACLE_HOME=C:\instantclient-basic-nt-11.2.0.2.0
set TNS_ADMIN=C:\instantclient-basic-nt-11.2.0.2.0
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
start plsqldev.exe
0、查看db
show con_name
show pdbs
1、cdb切換至pdb
alter session set container=pdb;
2、pdb切換至cdb
alter session set container=cdb$root;
3、pdb更改字符集(cdb的字符集必須為al32utf8)
alter system enable restricted session; (恢復操作為alter system disable...)
alter database character set internal_use zhs16gbk;
注:使用低版本的client在不同字符集的pdb之間切換會報錯:ora-24964
4、實例啟動后自動打開所有pdb
CREATE OR REPLACE TRIGGER open_pdbs AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
5、pdb克隆
create pluggable database pdb2 from pdb1 file_name_convert=('pdb1path','pdb2path');
我只會在unix下面寫,嘿嘿win的我還不會呢。。
把代碼貼上。至于怎么
編譯,再查查吧~
int
main()
{
EXEC
SQL
BEGIN
DECLARE
SECTION;
char
oc_passwd[101];
/*數(shù)據(jù)庫密碼*/
char
oc_userid[101];
/*數(shù)據(jù)庫用戶名*/
char
oc_dbname[101];
/*數(shù)據(jù)庫名*/
char
oc_coad[101];
EXEC
SQL
END
DECLARE
SECTION;
memset(oc_passwd,
0x00,
sizeof(oc_passwd));
memset(oc_userid,
0x00,
sizeof(oc_userid));
memset(oc_dbname,
0x00,
sizeof(oc_dbname));
/*取數(shù)據(jù)庫用戶名*/
strcpy(oc_userid,
"userid");
/*取數(shù)據(jù)庫用戶密碼*/
strcpy(oc_passwd,
"passwd")
;
/*取數(shù)據(jù)庫名*/
strcpy(oc_dbname,
"dbname");
EXEC
SQL
CONNECT
:oc_userid
IDENTIFIED
BY
:oc_passwd
USING
:oc_dbname;
if
(sqlca.sqlcode
!=
0)
{
printf("用戶名[%s]密碼[%s]數(shù)據(jù)庫[%s]\n",
oc_userid,
oc_passwd,
oc_dbname);
printf("連接數(shù)據(jù)庫失敗,sqlcode=%d\n",
sqlca.sqlcode);
return
-1;
}
/*讀table取coad字段*/
memset(oc_coad,
0x00,
sizeof(oc_coad));
EXEC
SQL
SELECT
coad
INTO
:oc_coad
FROM
table
WHERE
1=1;
if
(sqlca.sqlcode
==
NORECORD)
{
printf("查詢無記錄\n");
return
-1;
}
else
if
(sqlca.sqlcode
!=
0)
{
printf("查詢失敗,sqlcode=%d\n",
sqlca.sqlcode);
return
-1;
}
return
0;
}