热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用OTL调用Oracle的存储函数

OTL介绍:OTL是Oracle,OdbcandDB2-CLITemplateLibrary的缩写,是一个C操控关系数据库的模板库,最新版本4.0.10
 
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 <o >> e >> b >> c.

cout <<"b = " <cout <<"c = " <cout <<"e = " <
//db.commit().
db.logoff().
}
catch( otl_exception&. p ) {
cerr <<<<<}
}

说明:"{ :E = call TEST( :A,:B,:C,:D"{ call :Name1 := function( Name2 }"
也不是
"{ call :Name1 //:= function( Name2 }"
而是
"{ :Name1 = call function( Name2 }"
这一点和otl.sourceforge.net上的说明不一样。
 
转载: http://www.100test.com/html/253/s_253883_25.htm

推荐阅读
  • 常用DOS命令,程序员的帮手
    2019独角兽企业重金招聘Python工程师标准cleanmgr–打开磁盘清理工具compmgmt.msc---计算机管理conf— ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • C语言自带的快排和二分查找
    Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
  • c语言基础编写,c语言 基础
    本文目录一览:1、C语言如何编写?2、如何编写 ... [详细]
  • 利用空间换时间减少时间复杂度以及以C语言字符串处理为例减少空间复杂度
    在处理字符串的过程当中,通常情况下都会逐个遍历整个字符串数组,在多个字符串的处理中,处理不同,时间复杂度不同,这里通过利用空间换时间等不同方法,以字符串处理为例来讨论几种情况:1: ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • 下面的是我的login.jsp程序当选择复选框陌生人登录的时候,点击“登录”按钮,可以进入留言界面。当有正确的用户名跟密码登录的时候就进入留言界面。但是当我都没有选择的时候直接点击“登录”按钮也可 ... [详细]
  • VS2003和VS2005下文本框的只能输入数字类型的区别
    前几天在做项目时,分别用03和05做,发现在判别文本框检验只能输入数字类型的数字时,在TextBox_KeyPress事件中e.keychar的属性有所区别,在VS2003下,是只 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • SQL 时间格式格式化
    将时间格式显示为:2007年5月18日--2005年5月18日SELECTCAST(YEAR(GETDATE())ASNVARCHAR)年CAST(MONTH(GET ... [详细]
  • Qt提供了QtSql模块来提供平台独立的基于SQL的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外, ... [详细]
  • VB.NET怎么位运算?注意只能对整型执行按位运算。浮点值必须转换为整型后,才能执行按位运算。按位运算采用二进制(以2为基)形式计算两个整数值。它们比较对应位置上的位,然后基于比较 ... [详细]
  • 1.连接相关名称类型说明ConnectDialog执行连接对话框控件ConnectedBoolean连接状态,通过函数Connect和Disconnect连接或关闭数据库连接,并触 ... [详细]
author-avatar
霸道Q丫头
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有