日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle通过OCI批量加载需要注意的问题

發布時間:2025/3/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle通过OCI批量加载需要注意的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ORACLE調用接口(Oracle Call Interface簡稱OCI)提供了一組可對ORACLE數據庫進行存取的接口子例程(函數),通過在第三代程序設計語言(如C語言)中進行調用可達到存取ORACLE數據庫的目的。OCI就是為了實現高級語言訪問數據庫而提供的接口。OCI允許開發者在程序里使用SQL和PL/SQL來訪問數據庫。開發者可以使用第三代語言來編寫程序,而使用OCI來訪問數據庫。 OCI是由一組應用程序開發接口(API)組成的,ORACLE提供API的方式是提供一組庫。這組庫包含一系列的函數調用。這組函數包含了連接數據庫、調用SQL和事務控制等。在安裝DBMS SERVER或者客戶端的時候,就安裝了OCI。 根據Oracle公司的介紹:OCI是如此可靠,以至于Oracle數據庫中的每一條SQL語句都通過OCI來執行。當應用程序開發人員需要面向Oracle數據庫服務器的最強大的接口時,他們將調用 Oracle調用接口(OCI)。OCI提供了對所有Oracle數據庫功能的最全面的訪問。OCI API中包含了最新的性能、可伸縮性和安全性特性。

  采用OCI的最大好處就是:它是最切近Oracle底層的技術,因此,效率是最高的。同時,它是跨平臺的。因此,在我給出的ORADBI庫,除了OCI之外,沒有其他外部依賴,稍加改動,就可以移植到非Windows平臺上或其他嵌入式平臺。

  然而,OCI也比較不容易使用。它的功能之強,粒度之細,語法之煩瑣,都不適合今天熟悉了快速開發模式的人員使用。然而,OCI的高效,直接根植于數據庫核心,跨平臺的語言特性,是其他如OO4O、OLEDB、ADO等COM方式不具備的。

下面就從之前一段時間參與SN數據庫集群中間件開發的實踐中積累的一點經驗,分享如下:

1.支持的類型 char , unsigned char, int, double,float,long ,char*

大部分類型直接調用接口不會出什么問題,但是char*尤其需要注意,容易出現亂碼。

2.加載的流程大致如下:

建立連接-》準備sql statement -》 綁定數據-》excute-》commit

對于字符串數據的加載的,需要采用三維數組,表中字符串類型的列數為一維,行數為第二維,每個字段的長度為第三維。

三維數組的變量聲明必須與excute的調用在同一個作用域內,否則,execute的時候,三維數組的所在的內存可能已經被重新分配,execute讀取綁定數據便會出現亂碼。

此處比較容易出錯,雖然execute并沒有顯示的調用綁定的數據變量,但是內部實現確實讀取綁定變量的數據批量加載到數據庫中。此處不注意,容易導致加載數據變成亂碼。并且此錯誤是偶發性錯誤,不是每次運行都會出現,畢竟內存分配是隨機的。

3.加載NULL字段。

批量加載的接口都是逐列加載某種類型的數據,并且保證各列之間通過位置保證一行數據的對應關系,那么如果一列數據中有NULL字段又該如何呢?

OCI接口中也是支持NULL數據加載的,是通過indicator(指示器)實現的。indicator是一個指針,類型是sb2,可以指向一個字段,也可以指向一列字段。在綁定接口:OCIBindByPos(stmthp,&bindhp,errhp,1,?(dvoid?*)&aa,4,?SQLT_INT,?(void*)&indicator,?NULL,?NULL,0,0,0); 作為參數傳入,其元素數目與綁定的數據列表aa的元素數目相等。位置一一對應。indicator對應位置為-1

的表示寫入NULL,>=0表示寫入數據列表aa中的值。

下面是官方文檔中,對指示器使用的介紹。

1.加載,數據寫入NULL:

Input

For input host variables, the OCI application can assign the following values to an indicator variable:

Table 2-7 Input Indicator Values

Input Indicator ValueAction Taken by Oracle

-1

Oracle assigns a NULL to the column, ignoring the value of the input variable.

>=0

Oracle assigns the value of the input variable to the column.

?2.查詢,數據讀取NULL:

Output

On output, Oracle can assign the following values to an indicator variable:

Table 2-8 Output Indicator Values

Output Indicator ValueMeaning

-2

The length of the item is greater than the length of the output variable; the item has been truncated. Additionally, the original length is longer than the maximum data length that can be returned in the sb2 indicator variable.

-1

The selected value is null, and the value of the output variable is unchanged.

?

0

Oracle assigned an intact value to the host variable.

>0

The length of the item is greater than the length of the output variable; the item has been truncated. The positive value returned in the indicator variable is the actual length before truncation.

Indicator Variables for Named Data Types and REFs

?

?

?

?

?

?

?

?

參考文獻:

1.OCI安裝部署以及常用的OCI函數介紹

http://www.cnblogs.com/joeblackzqq/archive/2011/04/24/2026461.html

2. OCI讀取單條記錄

http://www.cnblogs.com/joeblackzqq/archive/2011/04/26/2028847.html

3.OCI寫入NULL

http://blog.csdn.net/spche/article/details/6195322

轉載于:https://www.cnblogs.com/qianxun/archive/2013/06/03/3115645.html

總結

以上是生活随笔為你收集整理的Oracle通过OCI批量加载需要注意的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。