C/C++封裝庫ocicpplib呼叫Oracle儲存過程的方法

langeldep發表於2011-09-15

         工作這麼多年,一直使用Mysql, Oracle資料庫沒有接觸過, 這次要使用C/C++語言來呼叫Oracle的儲存過程, 懶得自己去看OCI的API了, 直接上網找別人封裝的庫, 最後發現了這個ocicpplib, 下載了看了一下, 還不錯, 使用起來比較簡單。下面就對我使用這個庫來呼叫儲存過程的例子說明一下, 對應呼叫其他的sql語句就不說了, 自己看demo, 很簡單的。

        ocicpplib庫的下載地址為 :

      http://ocicpplib.sourceforge.net/  以前是這個地址可以下載,現在不行了。

用下面這個:

http://nchc.dl.sourceforge.net/project/ocicpplib/ocicpplib/0.5.6/ocicpplib-0.5.6.tar.gz


下面使用這個簡單的儲存過程來進行測試, 有兩個輸出引數, 一個為字串型別, 一個為整數型別。



CREATE OR REPLACE PROCEDURE P_TEST
(
    ID IN int,
    Name OUT varchar2,
    Result OUT int
)
IS
tmpVar NUMBER;
/******************************************************************************

******************************************************************************/
BEGIN
   tmpVar := 0;
   Name := 'www.csdn.net';
   Result := 123456;
   
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END P_TEST;


下面的程式碼為呼叫程式碼


#include <ocicpp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <sys/time.h>
#include <map>
#include <iostream.h>

using namespace OCICPP;

Connection g_OracleCon;

int  main (int argc, char** argv)

{

    db::init();

    connect(g_OracleCon, "192.168.2.221/qatest", "root", "123456");


    Cursor cur;
    cur.drop();

    char Name[128]={0};
    int Result = 0;
    short isNull = 0;

    //g_OracleCon.prepare ("BEGIN P_CDN_GETTEST(1000, :resOut); END;", cur);
    //cur.bind(param, val, &isNull);

    std::string param1 = "Name";
    std::string param2 = "Result";

    g_OracleCon.prepare ("BEGIN P_TEST(1000, :Name, :Result); END;", cur);
    cur.bind(param1, Name, sizeof(Name), &isNull);
    cur.bind(param2, Result, &isNull);

    cur.execute ();

    printf ("Name=%s, Result=%d\n", Name, Result);

    return 0;

}


就是如此簡單。。。。。

相關文章