熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

使用OTL調用Oracle的存儲函數

2022-06-13   來源: Oracle 

  OTL介紹

  OTL 是 Oracle Odbc and DBCLI Template Library 的縮寫是一個C++操控關系數據庫的模板庫最新版本參見下載地址

  優點a 跨平台

  b 運行效率高與C語言直接調用API相當

  c 開發效率高起碼比使用起來更簡單更簡潔

  d 部署容易不需要ADO組件不需 framework 等

  缺點

  a 只有C++才可以使用她

  b 說明以及范例不足(暫時性的)

  總的說來對於C++程序員而言使用OTL操作關系數據庫是最好的選擇其網站上有很多的范例本人在這裡對使用OTL調用Oracle的存儲函數(存儲函數比存儲過程多個返回值)作一個示范而其他的比如查詢更新存儲過程等就太簡單了直接看的范例

  Oracle 存儲函數 TEST 代碼

  ( a In Integer b Out Integer c in out Integer d In Long ) Return Long

  is

  begin

  b := a;

  c := * c;

  Return( < || d || > );

  end;

  說明Oracle中的long不是C/C++中的長整型而是varchar_long對應著OTL中的otl_long_string這是一種很復雜的類型本人就用它來舉例

  C++調用TEST的代碼

  #include <string>

  #include <iostream>

  //#define OTL_ORAI // 使用這個宏就表示使用Oraclei的API而不是ODBC API

  #define OTL_ODBC    // 使用這個宏就表示使用通用的ODBC API

  #include otlvh

  using namespace std;

  void main( void )

  {

  otl_connect::otl_initialize();

  try {

  otl_connect db;

  dbrlogon( Driver={Microsoft ODBC for Oracle};Server=ZZZ;Uid=XXX;Pwd=YYY; );

  // dbset_max_long_size(?); 如果varchar_long長度非常長超過默認值的話你需要這一句

  otl_stream o( { :E<varchar_longout> = call TEST(  :A<intin>:B<intout>:C<intinout>:D<varchar_longin&g t; ) } db );

  oset_commit();

  int a = ;

  int b = ;

  int c = ;

  otl_long_string d( abc );

  otl_long_string e;

  o << a << c << d;

  o >> e >> b >> c;

  cout << b = << b   << \n;

  cout << c = << c   << \n;

  cout << e = << ev << \n;

  //mit();

  dblogoff();

  }

  catch( otl_exception& p ) {

  cerr << pmsg << \n

  << pstm_text << \n

  << psqlstate << \n

  << pvar_info << \n

  << endl;

  }

  }

  說明{ :E<varchar_longout> = call TEST(  :A<intin>:B<intout>:C<intinout>:D<varchar_longin&g t; ) }這一句中的ABCDE就是一個名字隨各人喜歡可寫成其他任何名稱但這個格式需要注意它不是

  { call :Name<intout> := function( Name<intin> }

  也不是

  { call :Name<intout> \\:= function( Name<intin> }

  而是

  { :Name<intout> = call function( Name<intin> }

  這一點和上的說明不一樣


From:http://tw.wingwit.com/Article/program/Oracle/201311/17501.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.