ORACLE調用介面(OCI)中物件類型轉化器(OTT)的使用

來源:互聯網
上載者:User

OTT是OCI中訪問物件類型資料的一個非常重要的工具,它將資料庫中的物件類型或幾何對象映射為C語言中的結構體,供OCI程式使用。在所有的支援oracle的作業系統中,OTT工具是以命令列方式工作的。要使用它,我們必須先做一些準備工作。

設定ORACLE_HOME環境變數,我的是C:\app\zxg\product\11.1.0\db_1。

在windows命令列方式下,輸入ott,出現下列資訊,

 

OTT使用方法執行個體:首先,在scott使用者下建立類型

CREATE TYPE emp_t AS OBJECT

( name VARCHAR2(30),

empno NUMBER,

deptno NUMBER,

hiredate DATE,

salary NUMBER);

 

我在本機上是在D盤根目錄運行這個程式,在D盤根目錄中,建立檔案demoin.tpy,在檔案裡面寫入

CASE=LOWER

TYPE emp_t

並儲存。輸入OTT命令,

D:\>ott userid=scott/tiger intype=demoin.tpy outtype=demoout.tpy code=c hfile=demo.h initfile=demov.c

具體說明是:使用使用者名稱scott和密碼tiger串連資料庫,將輸入檔案demoin.tpy中的類型定義轉換成C語言中的結構體聲明。輸出到標頭檔demo.h(C語言中結構體定義)和demoout.tpy。實現檔案demov.c包含了一些使用者定義型別轉換和初始化的函數資訊。

 

執行這個命令後,由OTT產生的類型輸出檔案demoout.tpy的內容如下:

CASE = LOWER

INITFILE = demov.c

INITFUNC = demov

 

TYPE SCOTT.EMP_T AS emp_t

  VERSION = "$8.0"

  HFILE = demo.h

 

由OTT產生的標頭檔demo.h的內容如下:

#ifndef DEMO_ORACLE

# define DEMO_ORACLE

 

#ifndef OCI_ORACLE

# include <oci.h>

#endif

 

typedef OCIRef emp_t_ref;

 

struct emp_t

{

   OCIString * name;

   OCINumber empno;

   OCINumber deptno;

   OCIDate hiredate;

   OCINumber salary;

};

typedef struct emp_t emp_t;

 

struct emp_t_ind

{

   OCIInd _atomic;

   OCIInd name;

   OCIInd empno;

   OCIInd deptno;

   OCIInd hiredate;

   OCIInd salary;

};

typedef struct emp_t_ind emp_t_ind;

 

#endif

 

由OTT產生的實現檔案demov.c如下:

 

#ifndef OCI_ORACLE

# include <oci.h>

#endif

 

sword demov(OCIEnv *env, OCIError *err)

{

   sword status = OCITypeVTInit(env, err);

   if (status == OCI_SUCCESS)

      status = OCITypeVTInsert(env, err,

         (unsigned char *) "SCOTT", 5,

         (unsigned char *) "EMP_T", 5,

         (unsigned char *) "$8.0", 4);

   return status;

}

 

一旦OTT完成類型轉換,則會針對intype檔案中的每一個物件類型,標頭檔中就包含有對應類型結構體定義,還有一個結構體表示該類型的空指示符。例如,在標頭檔中,結構體emp_t就表示物件類型emp_t,還有一個對應的指示符結構體emp_t_ind。

 

這個只是針對C語言的,如果要轉換為C++的源檔案,那麼就必須輸入類似於下面的命令:

ott userid=scott/tiger intype=demoin.tpy outtype=demoout.tpy code=cpp hfile=
sdogeometry.h cppfile=sdogeometry.cpp

輸入正確後,得到了下面的檔案。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.