OTL翻译(2) -- OTL流的概念

OTL流的概念

任何的SQL语句、SQL语句块或存储过程,都是通过输入与输出变量进行处理参数与结果的。

如:

例1:一个SELECT语句把标量的输入变量作为WHERE子句部分的条件;同时SELECT部分则定义了输出的字段,并且在结果集为多行的情况下还是一个VECTOR结构。

例2:一个INSERT语句把数据写入数据库中,同样需要输入数据。UPDATE也是同样的道理。

例3:一个DELETE语句从表中删除数据,删除的条件同样需要通过参数输入。

例4:一个存储过程可能同时具有输入与输出参数。通过存储过程的参数都是标量,但某些特殊情况下ORACLE的存储过程还可以返回一个游标、MS SQL SERVER还可以返回一个结果集。

例5:一个多功能的SQL语句块则有可能具有标量或矢量的输入与输出参数。

专业的程序里面往往有大量的SQL操作,如大量的INSERT/UPDATE/SELECT/DELETE等。所以参数对于SQL语句来讲,都可以理解为VECTOR的类型。

下面的图示表示的非常清楚。对于任何的SQL语句或语句块存储过程等,这些SQL都可以作为一个黑盒子一样。它们的输入与输出总是具有VECTOR类型。

为什么不把SQL语句与数据(输入或输出参数)整合在一起?而是通过多个不同的结构来包装SQL语句与数据呢?OTL通过otl_stream来回答这个问题。

SQL语句在执行的时候,通过otl_strea对数据进行操作,otl_stream是一个缓冲流,它包括输入与输出两个缓冲区。输入缓冲区用来存放输入参数,输出缓冲区用来存放输出参数。

C++流总是通过重载 >> 和 << 两个操作符来处理输入与输出数据,otl_stream同样也重载了这两个符号用来处理输入与输出数据。

OTL的流与C++的流类似。一个SQL语句或存储过程打开的时候通过一个普通的缓冲流,OTL的逻辑SQL语句部分还是保留。OTL的流把输入与输出缓冲区分开处理。

OTL流里面有个刷新的函数,当缓冲区满的时候或是重新读取或写入数据的时候,就通过该刷新操作把重新刷新缓冲区的数据。更重要的是OTL的流具有相当简单的接口,对于熟悉C++流的你来说,只要记住简单的几个操作即可。

在OTL流内部有一个简单的变量解析器。所以不需要绑定变量的时候指定变量类型与占位符,所有这些都在OTL流内部动态的处理。OTL流仅需要打开进行读和写。

OTL流可能会抛出otl_exceptionr的异常,所以为了避免程序core down需要在处理OTL流的时候,用try…catch…块把相关代码包含起来。

OTL流的数据处理是自动的。当所有的输入变量全部定义后,它就自动的触发SQL去执行,并把输出填到输出缓冲区里面。此时输出就可以去缓冲区里面读取数据。如果缓冲区里面的数据满了后,还有数据未读出,则等等读取缓冲区数据后,再去取其他部分的数据。(如缓冲区只能容1000行数据,但某次SELECT取出了2000条数据,则先取出1000条后,如果缓冲区数据被程序取出后,OTL再自动的去取另外的1000条数据填进缓冲区里面。)

时间: 2024-07-30 01:59:29

OTL翻译(2) -- OTL流的概念的相关文章

OTL翻译(5) -- otl_stream流相关绑定变量

声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并且在内部进行变量的内存分配操作. 在ORACLE里面占位符的表示方法与其他数据库不同,在ORACLE里面的占位符是通过带有冒号的前缀来表示的,如::f1/:supervisor_name/:employee_id等,并且同一个占位符可能在同一个SQL语句里面使用多次. 在ODBC或DB2 CLI里面

OTL翻译(10) -- OTL的流缓冲池

OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流被关闭后,实际上流的相关变量被保存在一个流缓冲池里面,以便再利用. 每一个流在解析SQL或与数据库层打交道的时候都存在着巨大的资源开销.OTL通过流缓冲池机制来解决这个不必要的开销以提高性能. 当一个流“关闭”后,实际上,它被保存在一个流缓冲池里面.如果后面再需要一个类似的流,那么就只需要把流缓冲池

otl翻译(11) -- OTL的迭代器

OTL stream read iterator 这个类是一个像传统的JDBC中的getter()操作一样扩展了OTL流的模板类.它现在还不支持UNICODE字符集.它对otl_refcur_stream和otl_stream的使用基本相同(在ORACLE8版本里面). 模板的定义如下: template<typename OTLStream, typename OTLException #if !defined(OTL_ORA7) // when any flavor of OTL but O

OTL翻译(3) -- OTL的主要类

相比于传统的C++类库而言,OTL更像是一个代码容器,里面复杂,但对外的接口简单.OTL在处理程序方面受到了STL的影响. OTL有一个模板框架,它实现了otl_stream的概念.该框架由模板类和内联函数组成.模板类把普通的类型作为参数,这些参数的类型提供了对数据库API的详细操作. 对于已有的数据库API,OTL提供如下的数据库API支持: ·       Oracle Call Interface for Oracle 7/8/8i /9i/10g/10gR2/11g (OCI7/8/8i

OTL翻译(4) -- otl_stream类

otl_stream Otl_stream是具体实现otl_stream_concept的类.任何的SQL语句.SQL语句块和存储过程都能通过otl_stream进行处理. 传统的数据库API处理SQL语句的时候,需要绑定变量与占位符,因此,程序员需要定义变量.解析SQL语句.调用绑定占位符的函数.把变量绑定到占位符上.执行SQL.读取输出的变量等等.如此循环.以上所有的这些操作在OTL里面的otl_stream类里面都是自动处理的,otl_stream类提供了与数据库交互自动化最大性能.该性能

鲨鱼币上线聚币网交易, 流支付概念得大佬推崇

近日,SAK已正式联手聚币网,成为该平台又一潜力巨大的明星产品.据悉,聚币网为比特币交易网旗下数字货币交易平台,创办于2014年初,现上线的币种包括比特币.莱特币.狗狗币.暗黑币.比特股等.SAK的加盟无疑让这一平台进一步提升.同时,比特币交易网CEO张寿松对这次合作表示满意,对SAK支付.流支付有价值认同. 张寿松表示:SAK支付在实体商户中的推广应用规划是值得肯定的,尤其是基于移动互联网和线下高端商户结合的O2O项目,一旦可以推广起来,对SAK支付在实体商户中的应用将是一个很好的促进,让更多

C/C++中关于输入输出缓冲区和流的概念理解

(本文章关于缓冲区概念的理解部分取自:http://developer.51cto.com/art/201107/277186.htm) 首先可以看下快递的寄送过程: 源地址(商家的仓库)——中转地(快递公司的仓库)——目的地(买家) 我们从淘宝商家买衣服,商家通过快递公司把商品送到我们手里的这个过程可以形象的解释下缓存区和流的这个概念. 1, 淘宝商家不会亲自把商品给买家送过来的,因为这样效率太低了,商家会通过快递公司这个中转,然后快递公司再把东西送给买家.淘宝商家就是在键盘上打字,买家就是程

MPEG2_TS流基本概念和数据结构

(1)ES- Elementary Streams (原始流),对视频.音频信号及其它数据进行编码压缩后的数据流称为原始流. 原始流包含訪问单元.比方视频原始流的訪问单元就是一副图像的编码数据. (2) PES-Packetized Elementary Streams (分组的原始流),原始流形成的分组称为PES分组.是用来传递原始流的一种数据结构 (3)节目是节目元素的集合. 节目元素可能是原始流,这些原始流有共同的时间基点,用来做同步显示. (4)传输流和节目流TS-Transport S

OTL中文乱码 OTL UTF8

在用unixODBC连接MySQL的时候字符编码是由odbc支持的,不需要C++编译OTL的时候加上什么编译条件. 如果你的数据库使用的编码是UTF-8,你要从这个数据库读数据,而且还要将结果放到这个数据库,你可以在配置文件odbc.ini里面加以要求 [mysql_from] Description = Data Source to mysql_from for read config for scp_platfom Driver =MYSQL TraceFile = sql.log TDS_