数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

使用OTL调用Oracle的存储函数


发布日期:2023年07月21日
 
使用OTL调用Oracle的存储函数

OTL介绍

OTL 是 Oracle Odbc and DBCLI Template Library 的缩写是一个C++操控关系数据库的模板库最新版本参见下载地址

优点a 跨平台

b 运行效率高与C语言直接调用API相当

c 开发效率高起码比使用起来更简单更简洁

d 部署容易不需要ADO组件不需 framework 等

缺点

a 只有C++才可以使用她

b 说明以及范例不足(暂时性的)

总的说来对于C++程序员而言使用OTL操作关系数据库是最好的选择其网站上有很多的范例本人在这里对使用OTL调用Oracle的存储函数(存储函数比存储过程多个返回值)作一个示范而其他的比如查询更新存储过程等就太简单了直接看的范例

Oracle 存储函数 TEST 代码

( a In Integer b Out Integer c in out Integer d In Long ) Return Long

is

begin

b := a;

c := * c;

Return( < || d || > );

end;

说明Oracle中的long不是C/C++中的长整型而是varchar_long对应着OTL中的otl_long_string这是一种很复杂的类型本人就用它来举例

C++调用TEST的代码

#include <string>

#include <iostream>

//#define OTL_ORAI // 使用这个宏就表示使用Oraclei的API而不是ODBC API

#define OTL_ODBC // 使用这个宏就表示使用通用的ODBC API

#include otlvh

using namespace std;

void main( void )

{

otl_connect::otl_initialize();

try {

otl_connect db;

dbrlogon( Driver={Microsoft ODBC for Oracle};Server=ZZZ;Uid=XXX;Pwd=YYY; );

// dbset_max_long_size(?); 如果varchar_long长度非常长超过默认值的话你需要这一句

otl_stream o( { :E<varchar_longout> = call TEST( :A<intin>:B<intout>:C<intinout>:D<varchar_longin&g t; ) } db );

oset_commit();

int a = ;

int b = ;

int c = ;

otl_long_string d( abc );

otl_long_string e;

o << a << c << d;

o >> e >> b >> c;

cout << b = << b << \n;

cout << c = << c << \n;

cout << e = << ev << \n;

//mit();

dblogoff();

}

catch( otl_exception& p ) {

cerr << pmsg << \n

<< pstm_text << \n

<< psqlstate << \n

<< pvar_info << \n

<< endl;

}

}

说明{ :E<varchar_longout> = call TEST( :A<intin>:B<intout>:C<intinout>:D<varchar_longin&g t; ) }这一句中的ABCDE就是一个名字随各人喜欢可写成其他任何名称但这个格式需要注意它不是

{ call :Name<intout> := function( Name<intin> }

也不是

{ call :Name<intout> \\:= function( Name<intin> }

而是

{ :Name<intout> = call function( Name<intin> }

这一点和上的说明不一样

上一篇:关于Oracle一些常用脚本的汇总(2)

下一篇:查看数据库中有无多余的索引SQL