锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品青草久久久久福利99,麻豆亚洲精品,av成人手机在线http://www.shnenglu.com/robinson119/category/4151.htmlUNIX/LINUX;ACE;SNMP;C++zh-cnSun, 25 May 2008 15:55:07 GMTSun, 25 May 2008 15:55:07 GMT60example1http://www.shnenglu.com/robinson119/archive/2007/08/20/30436.html瀹濇潐瀹濇潐Mon, 20 Aug 2007 09:01:00 GMThttp://www.shnenglu.com/robinson119/archive/2007/08/20/30436.htmlhttp://www.shnenglu.com/robinson119/comments/30436.htmlhttp://www.shnenglu.com/robinson119/archive/2007/08/20/30436.html#Feedback0http://www.shnenglu.com/robinson119/comments/commentRss/30436.htmlhttp://www.shnenglu.com/robinson119/services/trackbacks/30436.html#include <iostream>
using namespace std;
#include <stdio.h>

#define OTL_ORA7 // Compile OTL 3.1/OCI7
#include <otlv4.h> // include the OTL 4 header file

otl_connect db; // connect object

void insert()
// insert rows into table
{
 otl_stream o(50, // buffer size
              "insert into test_tab values(:f1<float>,:f2<char[31]>)",
                 // SQL statement
              db // connect object
             );
 char tmp[32];

 for(int i=1;i<=100;++i){
  sprintf(tmp,"Name%d",i);
  o<<(float)i<<tmp;
 }
}

void select()
{
 otl_stream i(50, // buffer size
              "select * from test_tab where f1>=:f<int> and f1<=:f*2",
                 // SELECT statement
              db // connect object
             );
   // create select stream
 
 float f1;
 char f2[31];

 i<<8; // assigning :f = 8
   // SELECT automatically executes when all input variables are
   // assigned. First portion of output rows is fetched to the buffer

 while(!i.eof()){ // while not end-of-data
  i>>f1>>f2;
  cout<<"f1="<<f1<<", f2="<<f2<<endl;
 }

 i<<4; // assigning :f = 4
   // SELECT automatically executes when all input variables are
   // assigned. First portion of output rows is fetched to the buffer

 while(!i.eof()){ // while not end-of-data
  i>>f1>>f2;
  cout<<"f1="<<f1<<", f2="<<f2<<endl;
 }

}

int main()
{
 otl_connect::otl_initialize(); // initialize OCI environment
 try{

  db.rlogon("scott/tiger"); // connect to Oracle

  otl_cursor::direct_exec
   (
    db,
    "drop table test_tab",
    otl_exception::disabled // disable OTL exceptions
   ); // drop table

  otl_cursor::direct_exec
   (
    db,
    "create table test_tab(f1 number, f2 varchar2(30))"
    );  // create table

  insert(); // insert records into table
  select(); // select records from table

 }

 catch(otl_exception& p){ // intercept OTL exceptions
  cerr<<p.msg<<endl; // print out error message
  cerr<<p.stm_text<<endl; // print out SQL that caused the error
  cerr<<p.var_info<<endl; // print out the variable that caused the error
 }

 db.logoff(); // disconnect from Oracle

 return 0;

}



瀹濇潐 2007-08-20 17:01 鍙戣〃璇勮
]]>
OTL 4.0, OTL concepthttp://www.shnenglu.com/robinson119/archive/2007/08/20/30435.html瀹濇潐瀹濇潐Mon, 20 Aug 2007 08:58:00 GMThttp://www.shnenglu.com/robinson119/archive/2007/08/20/30435.htmlhttp://www.shnenglu.com/robinson119/comments/30435.htmlhttp://www.shnenglu.com/robinson119/archive/2007/08/20/30435.html#Feedback0http://www.shnenglu.com/robinson119/comments/commentRss/30435.htmlhttp://www.shnenglu.com/robinson119/services/trackbacks/30435.htmlOTL stream concept

Any SQL statement, PL/SQL block or a stored procedure call is characterized by its input / output [variables].

Example 1. A SELECT statement has scalar input variables that are used in the WHERE clause of the statement. The SELECT statement also defines output columns. Potentially, the output columns are vector parameters since the SELECT statement may return multiple rows.

Example 2. An INSERT statement writes data into a table, i.e. it has input parameters. Same is true for UPDATE statemements.

Example 3. A DELETE statement deletes rows from a table. Deletion criteria needs to be entered, thus the DELETE statement has input.

Example 4. A stored procedure may have input and/or output parameters. Usually, stored procedure parameters are scalars. There is a special case, though: stored procedure returning a referenced cursor (Oracle) or a result set (MS SQL Server or Sybase).

Example 5. An arbitrary PL/SQL block may have input or/and output parameters that may be either scalars or vectors.

Industrial strength database servers have bulk (or array) operations:

  • bulk INSERT
  • bulk UPDATE
  • bulk DELETE
  • bulk SELECT

Therefore, parameters in INSERT/UPDATE/DELETE statement may be vectors if the statement is performed in bulk.

The picture is clear: any interaction with SQL or its procedural extension can be treated as a black box with input and/or output. It does not matter what the black box does inside (according to the definition of a black box). What matters is the input wires that send signals into the box and the output wires that receive signals from the box:

Some of the wires may be both input and output.

Why not combine the concept of data streams and SQL? Instead of multiplying constructs and making database API's too convoluted, why not unify and simplify them? The OTL gives an answer to those questions and the answer is the otl_stream class.

Since a SQL statement may be done in bulk, the otl_stream is a buffered stream. Conceptually, the otl_stream has two separate buffers: input and output. The input buffer is comprised of all input variables put together. Respectively, the output buffer is comprised of all output variables put together.

C++ streams are usually manipulated via operator >> and operator <<. The stream reference is on the left of the operator symbol:

   s>>variable;
s<<variable;

The double arrow shows the direction in which data goes:

  • >> -- from the stream into the data container (variable)
  • << -- from the data container (variable) into the stream

OTL streams are similar to buffered C++ streams . A SQL statement or stored procedure call is opened as an ordinary buffered stream. The logic of the OTL stream operations remains the same as the C++ stream operations with the only exception -- the OTL stream has separate input and output buffers which may overlap.

The OTL stream has a flush function for flushing its input buffer when the buffer gets full and a collection of >> and << operators for reading and writing objects of different data types. The most important advantage of the OTL streams is their unified interface to SQL statements and stored procedure call of any kind. This means that the application developer needs to remember just a few syntactical constructs and function names which he already got familiar with when he started working with C++ streams.

Inside the OTL stream there is a small parser for parsing declarations of bind variables and their data types. There is no need to declare C/C++ host variables and bind them with placeholders by special bind function calls. All necessary buffers are created dynamically inside the stream. The stream just needs to be opened for reading and writing values.

The OTL stream interface requires use of the OTL exceptions. This means that potentially any OTL stream operation can throw an exception of the otl_exception type. In order to intercept the exception and prevent the program from aborting, wrap up the OTL stream code with the corresponding try & catch block.

The functioning of the otl_stream is pretty much automatic: when all of the input variables of the stream are defined (in other words, the input buffer is filled out), it triggers the block box inside the stream to execute. The output buffer gets filled out in the process of the execution of the black box. After the execution is finished, the output values can be read from the stream. If it is a SELECT statement and it returns more rows than the output buffer can hold, after the whole output buffer is read, then the stream automatically fetches the next bacth of rows into the output buffer.



瀹濇潐 2007-08-20 16:58 鍙戣〃璇勮
]]>
OTL 4.0, Introductionhttp://www.shnenglu.com/robinson119/archive/2007/08/20/30434.html瀹濇潐瀹濇潐Mon, 20 Aug 2007 08:55:00 GMThttp://www.shnenglu.com/robinson119/archive/2007/08/20/30434.htmlhttp://www.shnenglu.com/robinson119/comments/30434.htmlhttp://www.shnenglu.com/robinson119/archive/2007/08/20/30434.html#Feedback0http://www.shnenglu.com/robinson119/comments/commentRss/30434.htmlhttp://www.shnenglu.com/robinson119/services/trackbacks/30434.htmlIntroduction This document describes the Oracle, Odbc and DB2-CLI Template Library, Version 4.0 (OTL 4.0). OTL 4.0 is a C++ library based on templates. It integrates all of the previous releases into one library.

OTL 4.0 was designed as a combination of a C++ template framework and OTL-adapters. The framework is a generic implementation of the concept of OTL streams. The OTL-adapters are thin wrappers around the database APIs and are used as class type parameters to be substituted into the template framework.

OTL 4.0 covers the functionality of a whole database API with just a handful of concrete classes: otl_stream, otl_connect, otl_exception, otl_long_string, and several template PL/SQL (Oracle) table container classes, generated from the template framework and the OTL-adapters.

The OTL code gets expanded into direct database API function calls, so it provides ultimate performance, reliability and thread safety in multi-processor environments as well as traditional batch programs. OTL 4.0, being a template library, is highly portable since it is self-sufficient and compact enough.

OTL 4.0 is ANSI C++ compliant (ANSI C++ typecasts, clean templatized code, etc.), tightly integrated with the Standard Template Library (STL) via so-called STL-compliant stream iterators, and natively supports the STL std::string's in otl_stream's.

The current version of the OTL supports Oracle 7 (natively via OCI7), Oracle 8 (natively via OCI8), Oracle 8i (natively via OCI8i), Oracle 9i (natively via OCI9i), Oracle 10g (natively via OCI10g), DB2 (natively via DB2 CLI), ODBC 3.x as well as ODBC 2.5 compliant data sources in MS Windows and Unix (e.g. Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS, etc.). The list of supported database backends is constantly growing.



瀹濇潐 2007-08-20 16:55 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线观看视频一区二区| 欧美日韩国产精品一区二区亚洲 | 欧美三级日韩三级国产三级 | 亚洲欧洲一区二区三区| 久久久久久一区二区三区| 激情久久久久| 亚洲欧洲综合| 国产精品视频免费在线观看| 久久久久网址| 欧美精品999| 亚洲欧美视频一区二区三区| 午夜欧美不卡精品aaaaa| 亚洲国产合集| 一区二区三区国产在线观看| 国产亚洲精品一区二区| 亚洲高清视频一区二区| 欧美激情一区二区久久久| 亚洲影视中文字幕| 久久精品一区| 99国产精品国产精品久久| 亚洲欧美精品一区| 亚洲精品视频一区| 午夜精品国产精品大乳美女| 亚洲精品国产精品国自产观看浪潮 | 国产精品激情电影| 午夜久久tv| 欧美黑人在线观看| 久久精品在线观看| 欧美日韩日日骚| 美女图片一区二区| 欧美日韩精品免费观看视频| 久久天天躁夜夜躁狠狠躁2022| 亚洲黑丝一区二区| 国产精品自拍三区| 亚洲日韩欧美一区二区在线| 韩日视频一区| 亚洲综合激情| 亚洲视频电影在线| 麻豆精品在线播放| 久久久久一区二区| 国产精品一卡二卡| 亚洲精品看片| 亚洲精品乱码久久久久久按摩观| 久久久噜噜噜久久| 国产精品户外野外| 亚洲国产精品一区制服丝袜| 国自产拍偷拍福利精品免费一| 久久久亚洲国产天美传媒修理工 | 午夜精品婷婷| 欧美日韩一区高清| 亚洲美女中文字幕| 99成人精品| 欧美精品一区二区三区在线看午夜 | 狠狠色丁香婷婷综合影院| 99精品国产高清一区二区| 在线免费观看视频一区| 欧美一区二区三区四区高清 | 欧美国产日本在线| 久久久久欧美精品| 好看的av在线不卡观看| 久久精品国语| 免费亚洲电影在线| 91久久中文| 欧美激情一二三区| 日韩一级在线观看| 亚洲在线中文字幕| 国产精品麻豆va在线播放| 亚洲视频在线看| 欧美一区二区三区四区在线| 国产精品专区第二| 欧美在线免费观看| 久久久久久高潮国产精品视| 国产一区二区三区高清在线观看 | 亚洲一区二区三区四区视频| 美女精品自拍一二三四| 亚洲国产美国国产综合一区二区| 欧美日韩免费高清| 一区二区三区鲁丝不卡| 欧美亚洲自偷自偷| 伊人久久大香线蕉av超碰演员| 亚洲国产欧美在线| 在线午夜精品自拍| 国产精品成人aaaaa网站| 亚洲永久精品国产| 久久一区二区三区国产精品| 在线看片日韩| 欧美日韩在线第一页| 欧美一级视频一区二区| 免费国产一区二区| 亚洲在线观看视频网站| 国产在线观看91精品一区| 欧美www在线| 亚洲小说欧美另类婷婷| 美日韩精品免费| 亚洲在线1234| 亚洲福利av| 欧美天天视频| 鲁大师影院一区二区三区| 一区二区三区欧美在线观看| 久热精品视频在线免费观看| 夜色激情一区二区| 黄色一区二区在线观看| 欧美体内she精视频在线观看| 亚洲国产精品欧美一二99| 午夜精品久久久| 亚洲精品在线三区| 国产午夜亚洲精品羞羞网站| 麻豆精品一区二区av白丝在线| 久久久久久久久久久一区 | 久久综合导航| 亚洲视频在线二区| 欧美二区不卡| 久久久久久综合| 性久久久久久久久久久久| 亚洲国产精品t66y| 国产亚洲精品自拍| 欧美日韩免费在线观看| 免费欧美日韩| 久久久亚洲影院你懂的| 亚洲欧美影院| 亚洲伊人网站| av不卡在线观看| 亚洲理伦电影| 亚洲人体1000| 亚洲国产成人不卡| 蜜臀久久99精品久久久久久9 | 亚洲黄色大片| 国产在线欧美日韩| 国产欧美大片| 国产欧美日韩视频一区二区三区 | 亚洲精品你懂的| 久久久精品动漫| 亚洲在线播放电影| 亚洲视频高清| 中文在线不卡| 亚洲午夜精品| 亚洲小视频在线观看| 亚洲性视频网站| 中日韩视频在线观看| 日韩一区二区福利| 夜夜嗨av一区二区三区四区 | 久久在线播放| 久久久蜜桃一区二区人| 久久一区二区三区四区| 久久亚洲国产精品一区二区 | 亚洲人成小说网站色在线| 亚洲国产精品第一区二区 | 国产精品久久久久久久app| 欧美大胆成人| 欧美日韩国产一区二区三区地区 | 久久精品中文| 久久精品国产第一区二区三区最新章节| 久久久五月婷婷| 老司机午夜精品视频| 亚洲第一视频| 亚洲国产精品久久久| 亚洲精选中文字幕| 亚洲午夜女主播在线直播| 亚洲欧美日韩在线一区| 久久久久免费视频| 欧美精品v日韩精品v国产精品 | 欧美在现视频| 久久一区二区三区四区| 免费观看日韩av| 国产精品看片你懂得| 国内在线观看一区二区三区| 91久久精品一区二区三区| 亚洲天堂成人在线视频| 欧美与黑人午夜性猛交久久久| 亚洲人成人99网站| 亚洲男女自偷自拍| 久久综合给合久久狠狠色 | 精品动漫3d一区二区三区| 亚洲欧洲日本专区| 亚洲少妇在线| 久久综合狠狠综合久久综合88 | 一区二区三区四区五区精品视频| 国产精品稀缺呦系列在线| 国产午夜精品视频| 亚洲另类一区二区| 久久久av水蜜桃| 日韩亚洲精品在线| 欧美一区二区三区久久精品| 欧美激情精品久久久六区热门| 久久国产精品久久w女人spa| 久久综合狠狠综合久久综青草| 午夜亚洲激情| 欧美精品在线观看一区二区| 国产综合色在线| 亚洲视频精选在线| 欧美成年人在线观看| 亚洲一区二区三区精品视频| 久久综合九色综合久99| 国产精品嫩草99av在线| 亚洲精品自在久久| 久久综合九色九九| 亚洲欧美日韩国产另类专区| 欧美日韩不卡合集视频| 91久久午夜| 亚洲第一网站|