锘??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>
            国产精品久久久一本精品| 免费在线观看精品| 国产精品看片资源| 亚洲一区二区三区在线观看视频| 亚洲精品免费一区二区三区| 欧美精品日韩一本| 中文精品视频一区二区在线观看| 99精品欧美一区二区三区综合在线 | 香蕉成人伊视频在线观看| 亚洲一区二区三区四区视频| 国产视频久久网| 欧美成人性生活| 欧美日韩成人在线播放| 欧美在线视频免费| 六月丁香综合| 亚洲一区影音先锋| 久久精品中文| 在线中文字幕不卡| 久久精品最新地址| 亚洲天堂av在线免费观看| 久久aⅴ国产紧身牛仔裤| 亚洲精品久久嫩草网站秘色| 亚洲综合欧美| 亚洲理伦在线| 久久精品国产免费| 亚洲天堂av图片| 久久综合导航| 欧美在线视频二区| 欧美午夜一区| 亚洲国产成人久久综合一区| 国产精品一区二区你懂的| 亚洲第一级黄色片| 国产在线欧美| 一区二区久久| 亚洲毛片在线看| 久久久精品一区| 欧美在线日韩| 国产精品美女主播在线观看纯欲| 欧美激情一区二区三区高清视频| 国产农村妇女精品| 一本一本久久| 日韩一级黄色av| 美女精品国产| 免费不卡中文字幕视频| 国产三级欧美三级日产三级99| 亚洲精品乱码久久久久| 亚洲福利视频网| 久久精品盗摄| 久久精品人人爽| 国产美女精品一区二区三区| 日韩图片一区| 亚洲四色影视在线观看| 欧美国产一区在线| 欧美国产大片| 亚洲黄色毛片| 免费精品99久久国产综合精品| 久久久久久欧美| 国产色综合天天综合网| 午夜精品视频一区| 久久9热精品视频| 国产一区二区三区无遮挡| 亚洲已满18点击进入久久| 亚洲欧美视频一区二区三区| 国产精品h在线观看| 一区二区三区欧美在线| 亚洲综合清纯丝袜自拍| 国产精品毛片| 欧美一区二区三区四区在线观看| 欧美永久精品| 国模吧视频一区| 久久亚洲精品一区| 亚洲国产成人91精品| 亚洲毛片视频| 欧美三级乱人伦电影| 亚洲一区二区成人| 久久久综合精品| 亚洲国产电影| 欧美日韩在线电影| 亚洲欧美日韩中文视频| 久久久久久网址| 亚洲精品国产精品乱码不99按摩| 欧美日韩成人综合天天影院| 国产精品99久久不卡二区| 午夜精品视频网站| 激情成人av| 欧美伦理91i| 午夜精品久久久久| 欧美电影免费网站| 午夜精品国产精品大乳美女| 国内成+人亚洲+欧美+综合在线| 久久久午夜电影| 日韩一区二区精品视频| 久久激情五月丁香伊人| 亚洲精品久久久久久一区二区| 国产精品大片免费观看| 久久久人成影片一区二区三区| 亚洲美女毛片| 久久综合成人精品亚洲另类欧美| 亚洲精品乱码久久久久久按摩观| 国产精品video| 久久综合久久综合久久综合| 在线一区二区日韩| 欧美大片在线观看| 欧美一区二区三区免费观看| 亚洲精品欧美专区| 国产亚洲一区二区三区在线观看| 欧美精品一区二区三区在线看午夜| 亚洲欧美另类在线观看| 亚洲国产日韩美| 久久免费视频网| 亚洲欧美日韩区| 亚洲伦理在线免费看| 激情综合电影网| 国产伦精品一区| 欧美日韩视频| 欧美电影免费观看网站| 久久精品国产一区二区三| 亚洲一区亚洲二区| 亚洲巨乳在线| 亚洲国产欧美一区二区三区丁香婷| 久久精品视频网| 午夜一区不卡| 亚洲一区二区精品在线| 妖精视频成人观看www| 亚洲国产色一区| 在线播放日韩欧美| 国产亚洲网站| 国产一二精品视频| 国产精品亚洲一区| 国产精品第三页| 欧美日韩亚洲综合在线| 欧美激情免费在线| 欧美成人一区二免费视频软件| 久久疯狂做爰流白浆xx| 午夜在线精品| 午夜伦理片一区| 欧美亚洲视频| 久久gogo国模裸体人体| 欧美一区二粉嫩精品国产一线天| 亚洲永久免费av| 亚洲欧美在线aaa| 小处雏高清一区二区三区 | 久久9热精品视频| 久久九九免费视频| 久久人人97超碰人人澡爱香蕉| 久久精品天堂| 久久综合九色| 欧美夫妇交换俱乐部在线观看| 免费久久99精品国产自在现线| 欧美大片18| 欧美日韩亚洲不卡| 国产精品乱码久久久久久| 国产精品亚发布| 狠狠综合久久av一区二区小说| 狠狠色丁香婷综合久久| 亚洲国产美女久久久久| 亚洲九九爱视频| 亚洲欧美区自拍先锋| 欧美在线免费观看亚洲| 久久亚洲私人国产精品va媚药| 欧美成人蜜桃| 亚洲精选视频免费看| 亚洲影院一区| 每日更新成人在线视频| 欧美日韩一区二区在线观看| 国产农村妇女精品一区二区| 激情综合久久| 一区二区三区精密机械公司| 欧美怡红院视频| 亚洲韩国青草视频| 亚洲专区免费| 欧美成人免费观看| 国产伦精品一区二区三| 91久久精品www人人做人人爽| 亚洲一区观看| 免费久久99精品国产| 99热这里只有精品8| 久久高清国产| 国产精品九色蝌蚪自拍| 亚洲福利视频三区| 午夜在线观看免费一区| 亚洲成人在线网站| 午夜精品久久久久久久白皮肤| 麻豆精品在线播放| 国产美女精品| 一区二区久久| 免费亚洲电影在线观看| 国产精品99久久久久久www| 蜜桃av一区| 国内成人精品视频| 亚洲欧美国产制服动漫| 欧美激情综合色| 久久国产视频网站| 国产精品久久久久久久久免费| 91久久久亚洲精品| 巨乳诱惑日韩免费av| 亚洲在线1234| 国产精品高清在线观看| 99re8这里有精品热视频免费| 久久综合色天天久久综合图片|