重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一般C语言连接oracle数据库通过使用oracle提供的OCI接口和PROC编程接口两种方式。
目前成都创新互联公司已为成百上千家的企业提供了网站建设、域名、网络空间、网站托管、企业网站设计、黄山区网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
OCI方式纯粹是一些函数接口。
PROC是oracle提供的一种C与ORACLE SQL的混合编程。程序(以.pc为后缀)编好之后,使用oracle提供的proc预编译程序,将pc文件编译成c文件(这一过程,相当于将SQL转换为OCI的接口),然后再使用c语言编译器生成可以执行文件。
OCI方式不容易入门,它拥有大量的接口函数,要很快熟悉它,非常难。但OCI方式的编程效率很高。
porc方式简单易用。可用于对性能要求不太高的项目。
使用PL/SQL Developer连接Oracle:
?1. 下载32位Oracle InstantClient,并展开到某目录,例如C:\instantclient-basic-nt-11.2.0.2.0;
?2. 将系统的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];
/*数据库密码*/
char
oc_userid[101];
/*数据库用户名*/
char
oc_dbname[101];
/*数据库名*/
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));
/*取数据库用户名*/
strcpy(oc_userid,
"userid");
/*取数据库用户密码*/
strcpy(oc_passwd,
"passwd")
;
/*取数据库名*/
strcpy(oc_dbname,
"dbname");
EXEC
SQL
CONNECT
:oc_userid
IDENTIFIED
BY
:oc_passwd
USING
:oc_dbname;
if
(sqlca.sqlcode
!=
0)
{
printf("用户名[%s]密码[%s]数据库[%s]\n",
oc_userid,
oc_passwd,
oc_dbname);
printf("连接数据库失败,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;
}