锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品青草久久久久福利99,麻豆亚洲精品,av成人手机在线http://m.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://m.shnenglu.com/robinson119/archive/2007/08/20/30436.html瀹濇潐瀹濇潐Mon, 20 Aug 2007 09:01:00 GMThttp://m.shnenglu.com/robinson119/archive/2007/08/20/30436.htmlhttp://m.shnenglu.com/robinson119/comments/30436.htmlhttp://m.shnenglu.com/robinson119/archive/2007/08/20/30436.html#Feedback0http://m.shnenglu.com/robinson119/comments/commentRss/30436.htmlhttp://m.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://m.shnenglu.com/robinson119/archive/2007/08/20/30435.html瀹濇潐瀹濇潐Mon, 20 Aug 2007 08:58:00 GMThttp://m.shnenglu.com/robinson119/archive/2007/08/20/30435.htmlhttp://m.shnenglu.com/robinson119/comments/30435.htmlhttp://m.shnenglu.com/robinson119/archive/2007/08/20/30435.html#Feedback0http://m.shnenglu.com/robinson119/comments/commentRss/30435.htmlhttp://m.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://m.shnenglu.com/robinson119/archive/2007/08/20/30434.html瀹濇潐瀹濇潐Mon, 20 Aug 2007 08:55:00 GMThttp://m.shnenglu.com/robinson119/archive/2007/08/20/30434.htmlhttp://m.shnenglu.com/robinson119/comments/30434.htmlhttp://m.shnenglu.com/robinson119/archive/2007/08/20/30434.html#Feedback0http://m.shnenglu.com/robinson119/comments/commentRss/30434.htmlhttp://m.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>
            欧美黄色网络| 欧美一区二区视频观看视频| 欧美成人r级一区二区三区| 99精品免费网| 欧美国产日韩a欧美在线观看| 久久久精品午夜少妇| 国产精品国产三级国产a| 亚洲国内自拍| 亚洲人在线视频| 好吊色欧美一区二区三区视频| 一区二区三区精品在线| 精品999久久久| 欧美另类亚洲| 久久嫩草精品久久久久| 亚洲激情第一区| 欧美高清在线播放| 欧美一区二区在线免费播放| 91久久在线观看| 亚洲午夜精品网| 亚洲欧洲日夜超级视频| 99xxxx成人网| 亚洲一区三区电影在线观看| 西瓜成人精品人成网站| 裸体素人女欧美日韩| 欧美体内she精视频| 免费观看不卡av| 久久综合久久综合久久综合| 在线视频你懂得一区| 久久综合中文| 亚洲精品午夜| 亚洲激情一区二区| 男女激情久久| 一区二区av| 中文在线资源观看网站视频免费不卡 | 欧美日韩亚洲一区三区| 亚洲另类在线视频| 亚洲视频中文字幕| 国产日韩专区| 亚洲第一天堂av| 欧美日韩精品高清| 久久不射中文字幕| 久久永久免费| 一区二区三区毛片| 亚洲一区二区视频在线| 狼狼综合久久久久综合网 | 亚洲成色精品| 欧美粗暴jizz性欧美20| 一区二区三区久久| 欧美一级久久久| 91久久精品国产91久久性色| 日韩午夜剧场| 国产亚洲人成a一在线v站| 欧美1区2区视频| 欧美午夜大胆人体| 欧美成人精品一区| 国产精品呻吟| 欧美国产日本韩| 欧美视频一区二区三区| 久久久久国产精品午夜一区| 欧美成人午夜视频| 在线视频你懂得一区| 亚洲一区影院| 亚洲国产网站| 亚洲一区二区精品在线| 亚洲精品国产视频| 亚洲区欧美区| 久久激情五月激情| 欧美国产视频在线| 久久久久久有精品国产| 欧美紧缚bdsm在线视频| 久久性天堂网| 国产精品网站在线播放| 亚洲人成7777| 在线日韩av片| 欧美资源在线观看| 性感少妇一区| 国产精品久久久久aaaa九色| 欧美国产综合视频| 激情五月***国产精品| 久久人人看视频| 国产精品美女久久久免费| 亚洲欧洲日韩在线| 亚洲啪啪91| 蜜臀va亚洲va欧美va天堂| 久久精品国产亚洲一区二区三区| 欧美日韩精品欧美日韩精品| 国产精品久久久久久久午夜片| 欧美黄色小视频| 国产在线高清精品| 欧美一区视频在线| 久久久精品网| 亚洲福利在线看| 免费成人性网站| 欧美激情视频一区二区三区在线播放 | 国产一区视频观看| 午夜久久一区| 久久精品99久久香蕉国产色戒| 国产精品日韩高清| 亚洲欧美日韩电影| 久久精品二区亚洲w码| 国产色产综合色产在线视频| 亚洲专区一区二区三区| 亚洲欧美日韩网| 国产精品一区二区欧美| 亚洲欧美日韩一区二区在线| 欧美亚洲一区二区在线| 国产老肥熟一区二区三区| 欧美一二区视频| 免费中文字幕日韩欧美| 亚洲另类黄色| 国产精品大片wwwwww| 亚洲在线观看| 久久久久久国产精品mv| 亚洲第一久久影院| 欧美极品在线播放| 亚洲午夜黄色| 久久综合中文字幕| 亚洲第一精品影视| 欧美日韩国产在线观看| 亚洲一区二区三区精品动漫| 久久精品欧美| 亚洲精选大片| 国产精品一二三四| 麻豆乱码国产一区二区三区| 亚洲精品视频在线看| 欧美在线观看www| 一区二区在线观看视频在线观看| 欧美国产一区二区| 亚洲——在线| 亚洲国产专区| 欧美精品福利在线| 亚洲国产色一区| 亚洲欧美一区二区精品久久久| 国产免费亚洲高清| 美国三级日本三级久久99| 亚洲国语精品自产拍在线观看| 亚洲欧美文学| 亚洲激情在线播放| 国产精品捆绑调教| 老牛嫩草一区二区三区日本| 日韩视频在线一区| 免费成人黄色| 欧美一区二区黄色| 99精品久久久| 亚洲高清在线视频| 国产视频亚洲| 亚洲一区二区少妇| 欧美精品久久久久久久久久| 亚洲天堂av高清| 欧美国产日韩免费| 久久精品国产2020观看福利| 日韩一区二区精品视频| 国内精品久久久久久影视8 | 99视频精品全部免费在线| 国语精品中文字幕| 欧美亚日韩国产aⅴ精品中极品| 久久伊人免费视频| 午夜精品国产精品大乳美女| 亚洲久久在线| 欧美国产综合| 男男成人高潮片免费网站| 久久9热精品视频| 亚洲在线视频网站| 一区二区三区精品国产| 亚洲经典三级| 亚洲国产精品123| 影音先锋国产精品| 国模一区二区三区| 国产日本欧美一区二区三区在线 | 午夜在线电影亚洲一区| 亚洲毛片av在线| 欧美成人一区二区三区| 久久亚洲私人国产精品va| 性色av一区二区三区红粉影视| 夜夜嗨av一区二区三区中文字幕 | 欧美日韩国产综合视频在线| 久久久久久夜| 欧美在线观看网址综合| 亚欧成人精品| 久久精品国产亚洲5555| 欧美影院成人| 欧美一区二区三区在线| 香蕉乱码成人久久天堂爱免费| 一本到高清视频免费精品| 亚洲精品一区久久久久久| 亚洲国产精品成人久久综合一区| 嫩草国产精品入口| 国产精品视频网址| 欧美日韩色一区| 久久午夜电影| 久久精品水蜜桃av综合天堂| 亚洲女人av| 午夜老司机精品| 欧美一区二区三区四区视频| 亚洲欧美色婷婷| 久久精品免费电影| 久久尤物视频| 欧美精品免费视频| 国产精品a级| 国产一区二区精品在线观看|