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条数据填进缓冲区里面。)
OTL翻译(2) -- OTL流的概念的更多相关文章
- OTL翻译(10) -- OTL的流缓冲池
OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流 ...
- OTL翻译(5) -- otl_stream流相关绑定变量
声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并 ...
- otl翻译(11) -- OTL的迭代器
OTL stream read iterator 这个类是一个像传统的JDBC中的getter()操作一样扩展了OTL流的模板类.它现在还不支持UNICODE字符集.它对otl_refcur_stre ...
- OTL翻译(3) -- OTL的主要类
相比于传统的C++类库而言,OTL更像是一个代码容器,里面复杂,但对外的接口简单.OTL在处理程序方面受到了STL的影响. OTL有一个模板框架,它实现了otl_stream的概念.该框架由模板类和内 ...
- OTL翻译(4) -- otl_stream类
otl_stream Otl_stream是具体实现otl_stream_concept的类.任何的SQL语句.SQL语句块和存储过程都能通过otl_stream进行处理. 传统的数据库API处理SQ ...
- Java IO 理解流的概念
Java IO 理解流的概念 @author ixenos 在理解流时首先理解以下概念 1.流的来源和去向一般在构造器指出 2.方法中的形参一般是将流输出到某个位置,读取(INPUT)流从流读出数据( ...
- 09-JS的事件流的概念(重点)
在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...
- 前端 ----js的事件流的概念(重要)
09-JS的事件流的概念(重点) 在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页 ...
- JS的事件流的概念(重点)
09-JS的事件流的概念(重点) 在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件 ...
随机推荐
- redis配置新端口
为redis分配一个8888端口,操作步骤如下:1.$REDIS_HOME/redis.conf重新复制一份,重命名为redis8888.conf.2.打开redis8888.conf配置文件,找到p ...
- 20172304 实验二 《Java面向对象程序设计》 实验报告
20172304 实验二 <Java面向对象程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:段志轩 学生学号:20172304 实验时间 ...
- TRUNCATE can't with condition
No, TRUNCATE is all or nothing. You can do a DELETE FROM <table> WHERE <conditions> but ...
- Sass 和 SCSS 有什么区别?
Sass 官网上是这样描述 Sass 的: Sass 是一门高于 CSS 的元语言,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法, ...
- Java 中的浮点数取精度方法
Java 中的浮点数取精度方法 一.内容 一般在Java代码中取一个double类型的浮点数的精度,四舍五入或者直接舍去等的方式,使用了4种方法,推荐使用第一种,我已经封装成工具类了. 二.代码实现 ...
- SSH项目整合基本步骤
SSH项目整合基本步骤 一.项目简介 该项目是由Spring4.Struts2 以及 Hibernate4 整合搭建的 web 项目,把Action分开编写,便于查看,使用JSTL.EL标签. 二.项 ...
- CodeForces1070A Find a Number 图论
令状态$f(i, j)$表示模$d$为$i$,和为$j$时的最小数 可以通过$bfs$来转移 然而就没了... 复杂度$O(10ds)$ #include <queue> #include ...
- hdu 4545 贪心 *
题意:小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转 换使小明的串和小西的变成同一个,那么他们两个人都 ...
- LR监控Apache资源
前提本文使用的是lampp环境下自带的Apache服务 步骤1.修改Apache中Httpd.conf文件,添加如下代码:文件位置为:/opt/lampp/etc/httpd.conf,如下图: &l ...
- Git_git的诞生
很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与 ...