pro*c

oracle 9i新特性
1,支持上下滚动游标:可以使用可滚动游标代替以往顺序游标
2,proc 支持连接池技术,应用此技术可以在应用程序中采用多线程进行数据库操作,提高应用程序性能。
常见的问题
1.我们怎么编译链接应用程序
编译和链接应用程序是个很平台化得工作,
   设置环境变量ORACLE_HOME=/home/oracle   #设定oracle的主目录路径
        ORACLE_SID=xingdb          #设定oracle实例名
        NLS_LANG=AMERICAN_AMERICA.ZHS16GBK   客户端字符集设置
        PATH=${ORACLE_HOME}/bin:${PATH}:.
        LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBARY_PATH}:.链接库文件路径
        export   ORACLE_HOME  ORACLE_SID NLS_LANG PATH LD_LIBRARY_PATH
对于简单的编译命令
proc iname=foo.pc oname=foo.c cc -I${OORACLE_HOME}/precomp/public foo.c -o foo -L${ORACLE_HOME}/lib -lclntsh
但对于复杂的工程这种编译将效率低下。建议写makefile例如还是foo项目,其中包含三个源文件foo1.pc foo2.pc foo3.pc将
对应makefile如下
#定义程序需要的库和头文件目录
include$(ORACLE_HOME)/rsdms/lib/env_rdbms.mk
ORAINC=${ORACLE_HOME}/precomp/public
ORALIB=${ORACLE_HOME}/lib
#定义proc命令和c编译器命令参数
PROC=proc
CC=cc
PROCPPFLAGS=\
 userid=xcl\xclxcl\
 sqlcheck=semantics\
 include=$(ORACLE_HOME)/rdbms/public \
 include=$(ORAINC) \
 lines=ture\
 parse=full
#CFLAGS=-q64 -I$(ORAINC)   #AIX 64位编译器需要
CFLAGS=-I$(ORAINC) -I${ORACLE_HOME}/rdbms/public
#定义文件类型编译依赖关系
.SUFFIXES:.o .c .pc
.pc.c:
 @$(PROC) $(PROCPPFLAGS) iname=$<
.c.o:
 @$(CC) $(CFLAGS)  -c$<
.pc.o:
 @$(PROC) $(PROCPPFLAGS) iname=$<
 @$(CC) $(CFLAGS)  -c$<
定义应用程序特有信息。对不同项目只需变动下面内容即可
OBJ=foo1.c foo2.c foo3.c
foo:$(OBJ)
 @$(CC) $(CFLAGS) $(OBJ) -o foo -L${ORACLE_HOME}/lib $(PROLDLIBS) -lm
 @rm -f $(OBJ)
 @rm -f *.lis
all:
 @make sqlvcp

宿主变量是在 C/C++语言中声明的变量,用于同Oracle 数据库进行数据交互。输入变
量用于从C 程序中向Oracle 数据库提供数据,又称为绑定变量。宿主变量使用在 SQL 语句中时,前方必须加入冒号“:”,以同SQL 语句其他关键字做
区分。
可以使用一个包含一定数量成员的结构作为变量,在 SQL 语句通过在结构变量前加入
冒号“:”符号,Pro*C/C++预编译软件将结构的各个结构成员作为宿主变量同Oracle 进行
数据交互。

类似于 C 语言的#ifdef 系列语句,在Pro*C/C++中也存在一系列类似语句用于有条件的
对源代码进行预编译,生成符合开发人员要求的源代码,这些语句包括:
EXEC ORACLE DEFINE symbol; -- 定义一个符号
EXEC ORACLE IFDEF symbol; -- 如果这个符号被定义了
EXEC ORACLE IFNDEF symbol; -- 如果这个符号没有定义
EXEC ORACLE ELSE; -- 否则
EXEC ORACLE ENDIF; -- 控制预编译条件块结束

5.1 连接到数据库
在 Pro*C/C++应用程序对Oracle 数据库数据进行操作前,必须先连接到数据库,连接语
句描述如下:
EXEC SQL CONNECT { :user IDENTIFIED BY :oldpswd | :usr_psw }
[[ AT { dbname | :host_variable }] USING :connect_string ]
[ {ALTER AUTHORIZATION :newpswd | IN { SYSDBA | SYSOPER } MODE} ] ;
其中各宿主变量含义如下:
user :存放Oracle用户数据库名
oldpswd/usr_psw:存放Oracle用户密码
:host_variable:主机名
:connect_string:Oracle NET/8配置的连接字符串
:newpswd:新Oracle用户密码,用于连接数据库并更改用户密码
常用的连接方法有两种, 一是将用户名和密码存放在两个宿主变量中, 采用
IDENTIFIED BY 子句:
EXEC SQL CONNECT :username IDENTIFIED BY :password ;
一是将用户名和密码按照“username/password”方式(在用户名和密码中用反斜线做分
隔的字符串)存放在一个宿主变量中:
EXEC SQL CONNECT :usernameandpwd;
也可以采用移植性不 好的方式:直接在 SQL 语句中书写用户名和密码字符串,连接
数据库,例如:
EXEC SQL CONNECT ‘xcl’ IDENTIFIED BY ‘xclxcl’;
或者
EXEC SQL CONNECT ‘xcl/xclxcl’;

5.1.4 通常连接失败的原因
􀂋 用户名/密码不对
􀂋 Oracle 用户没有connect 权限
􀂋 Oracle 用户账户密码过期
􀂋 Oracle 用户账户被锁定
通过 DBA 进行相应的赋权、解锁操作即可。

原文链接: https://www.cnblogs.com/coolgestar02/archive/2011/04/11/2012614.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    pro*c

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/23828

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午1:42
下一篇 2023年2月8日 上午1:43

相关推荐