使用OTL呼叫Oracle的儲存函式

2021-04-02 23:10:55 字數 1379 閱讀 4606

otl介紹:

otl 是 oracle, odbc and db2-cli template library 的縮寫,是乙個c++操控關聯式資料庫的模板庫,最新版本4.0.104,參見

優點:a. 跨平台

b. 執行效率高,與c語言直接呼叫api相當

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

d. 部署容易,不需要ado元件,不需要.net framework 等

缺點:

a. 只有c++才可以使用她

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

總的說來,對於c++程式設計師而言,使用otl操作關聯式資料庫是最好的選擇,其**上有很多的範例,本人在這裡對使用otl呼叫oracle的

儲存函式(儲存函式比儲存過程多個返回值)作乙個示範,而其他的比如查詢、更新、儲存過程等就太簡單了,直接看

otl.sourceforge.net的範例 。

oracle 儲存函式 test **:

( a in integer, b out integer, c in out integer, d in long ) return long

is

begin

b := a;

c := 2 * c;

return( '<' || d || '>' );

end;

說明:oracle中的long不是c/c++中的長整型,而是varchar_long,對應著otl中的otl_long_string,這是一種很複雜的型別,本人就用它來舉例。

c++呼叫test的**:

#include

#include

//#define otl_ora9i // 使用這個巨集就表示使用oracle9i的api,而不是odbc api

#define otl_odbc    // 使用這個巨集就表示使用通用的odbc api

#include "otlv4.h"

using namespace std;

void main( void )

;server=zzz;uid=***;pwd=yyy;" );

// db.set_max_long_size(?); 如果varchar_long長度非常長,超過預設值的話,你需要這一句

otl_stream o( 1, "

catch( otl_exception& p ) }

說明:""

也不是

""

而是

""

這一點和otl.sourceforge.net上的說明不一樣。

OTL呼叫Oracle儲存過程

otl很早前用過,今天寫東西要調儲存過程,程式寫完了,除錯死活通不過,折騰了一早晨。最後才發現錯誤,這裡總結一下 1 寫的不規範。有個引數後邊少寫了個 以至於總是抱錯。而單獨寫的測試例子就沒問題,後來一步一步跟蹤了後才發現。2 呼叫格式 a 如果 define otl ora9i compile o...

OTL呼叫Oracle儲存過程

otl很早前用過,今天寫東西要調儲存過程,程式寫完了,除錯死活通不過,折騰了一早晨。最後才發現錯誤,這裡總結一下 1 寫的不規範。有個引數後邊少寫了個 以至於總是抱錯。而單獨寫的測試例子就沒問題,後來一步一步跟蹤了後才發現。2 呼叫格式 a 如果 define otl ora9i compile o...

linux下使用otl開發oracle資料庫程式

include using namespace std include define otl stream read iterator on define otl ora9i compile otl 4.0 oci9i include include the otl 4.0 header file ...