使用OTL调用Oracle的存储函数

OTL是一个用于C语言操控Oracle、Odbc及DB2的模板库,具备跨平台、高效运行等特点。本文介绍了如何使用OTL调用Oracle存储函数,并提供了一个具体的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
OTL介绍:
OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C 操控关系数据库的模板库,最新版本4.0.104,参见http://otl.sourceforge.net/,下载地址http://otl.sourceforge.net/otlv4_h.zip。
优点:a. 跨平台
b. 运行效率高,与C语言直接调用API相当
c. 开发效率高,起码比ADO.net使用起来更简单,更简洁
d. 部署容易,不需要ADO组件,不需要.net framework 等
缺点:
a. 只有C 才可以使用她
b. 说明以及范例不足(暂时性的)


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

Oracle 存储函数 TEST 代码:
( a In Integer, b Out Integer, c in out Integer, d In Long ) Return Long
is
begin
b := a.
c := 2 * c.
Return( < || d || > ).
end.
说明:Oracle中的long不是C/C 中的长整型,而是varchar_long,对应着OTL中的otl_long_string,这是一种很复杂的类型,本人就用它来举例。

C 调用TEST的代码:
#include
#include
//#define OTL_ORA9I // 使用这个宏就表示使用Oracle9i的API,而不是ODBC API
#define OTL_ODBC // 使用这个宏就表示使用通用的ODBC API
#include "otlv4.h"
using namespace std.

void main( void )
{
otl_connect::otl_initialize().
try {
otl_connect db.
db.rlogon( "Driver={Microsoft ODBC for Oracle}.Server=ZZZ.Uid=XXX.Pwd=YYY." ).
// db.set_max_long_size(?). 如果varchar_long长度非常长,超过默认值的话,你需要这一句

otl_stream o( 1, "{ :E = call TEST( :A ,:B ,:C ,:D o.set_commit(0).

int a = 1.
int b = 0.
int c = 2.
otl_long_string d( "abc", 0, 3 ).
otl_long_string e.
o << a << c << d.
o >> e >> b >> c.

cout << "b = " << b << /n.
cout << "c = " << c << /n.
cout << "e = " << e.v << /n.

//db.commit().
db.logoff().
}
catch( otl_exception&. p ) {
cerr << p.msg << "/n"
<< p.stm_text << "/n"
<< p.sqlstate << "/n"
<< p.var_info << "/n"
<< endl.
}
}

说明:"{ :E = call TEST( :A ,:B ,:C ,:D "{ call :Name1 := function( Name2 }"
也不是
"{ call :Name1 //:= function( Name2 }"
而是
"{ :Name1 = call function( Name2 }"
这一点和otl.sourceforge.net上的说明不一样。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值