国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

ORACLE調用接口技術在一個應用系統工程環境中的應用

2024-08-29 13:38:47
字體:
來源:轉載
供稿:網友

  摘 要 Oracle調用接口(Oracle Call Interface簡稱OCI)提供了一組可對ORACLE數據庫進行存取的接口函數。本文利用OCI技術對一個應用系統工程環境ASEE進行了功能擴充,使其具有了訪問ORACLE數據庫的功能,接口簡單,靈活易用。
  要害詞 OCI技術,應用系統工程環境,VSSDL
  
  1 引言
  應用系統工程環境ASEE(application System Engineering Environment) 是一個基于計算機的應用系統開發環境。它支持從需求分析、系統設計、體系結構優化直至java或C++代碼自動生成的全過程。
  可視化的系統規格說明和設計語言VSSDL(Visual System Specification and Design Language)是一種可視化的需求原型設計語言,它是ASEE的核心。它用圖形來描述系統的功能結構,用文本來描述系統的行為。為了支持用VSSDL語言定義和設計系統的軟件原型,ASEE中定義了圖形編輯器(Graphic Editor)、行為編輯器(Behavior Editor)、變量編輯器(Variable Editor)和類型編輯器(Type Editor)等各種交互性的編輯工具。
  
  2 VSSDL的不足
  計算機應用系統的開發離不開數據庫的參與,而目前版本的VSSDL語言不能直接支持數據庫,這成了用ASEE來開發應用系統的一個嚴重缺陷。但ASEE的C語言支持則可能作為解決上述問題的一條途徑。
  
  3 對VSSDL的功能擴充
  ASEE運行的軟件環境是SunOS Unix操作系統和Open Windows窗口系統。它自身具有一大特點就是能夠調用用戶自定義的C函數,因此可以把這一特點作為擴充VSSDL的橋梁,使得VSSDL與主流數據庫系統之間產生一條通道。
  3.1 OCI簡介
  ORACLE調用接口(Oracle Call Interface簡稱OCI)是ORACLE公司開發的一個應用程序開發工具,它提供了一組可對ORACLE數據庫進行存取的接口子例程(函數),通過在第三代程序設計語言(如C語言)中進行調用可達到存取ORACLE數據庫的目的。
  OCI開發方法實際上是將結構化查詢語言(SQL)和第三代程序設計語言相結合的一種方法。對數據庫的訪問是通過調用OCI庫函數實現的,若將C語言作為宿主語言,那么ORACLE庫調用其實就是C程序中的函數調用,一個含OCI調用的C程序其實就是用C語言編寫的應用程序。這樣的程序既具有SQL語言非過程性的優點又具有C語言過程性的優點,同時還可具有SQL語言的擴展——PL/SQL語言過程性和結構性的優點,因此使得開發出的應用程序具有高度靈活性和強大的數據處理功能。
  3.2 遠程訪問ORACLE 數據庫
  綜上,通過在VSSDL中編寫用戶自定義C函數和使用OCI工具就能達到在VSSDL中存取ORACLE 數據庫的目的了。
  ORACLE調用接口技術在一個應用系統工程環境中的應用
  圖1 VSSDL遠程存取ORACLE數據庫
  
  假如VSSDL本地機作為Oracle Server的一個Client端,則問題將變得簡單,僅考慮C函數的實現問題即可,但是可能會存在一個復雜化的問題,即假如VSSDL本地機并非Oracle Server的Client端,則將面臨一個工作站之間或工作站與PC之間通訊的問題,解決了通訊問題就可將VSSDL存取ORACLE數據庫的操作上升到一個一般性的問題,即不論VSSDL是否在本地機也不論本地機是否是Oracle Server的一個Client端,都能實現在VSSDL中存取ORACLE數據庫的操作,原理如圖1。
  通訊程序的實現采用了通訊應用程序接口socket這一API,它是TCP/ip網絡協議通訊最常用的接口。可以將socket看作網絡通訊的一個端點,為了進行網絡通訊,程序在網絡對話的每一端都需要建立一個socket,兩個socket之間的連接可以是面向連接的(點對點連接)也可以是無連接的。通訊雙方通過各自的socket接口發送或接收信息,以便完成通訊任務。本通訊程序的實現采用了面向連接的socket接口。
  3.3 定義自定義功能函數
  本部分的主要工作是設計開發了九個自定義功能函數并將其裝入VSSDL&127;語言中,使得用戶可以直接在VSSDL中編寫SQL語句,用戶接口友好簡單,方便易用。雖然這些自定義函數的實現離不開OCI函數和UNIX系統的Windows Sockets API的參與,但所有這些技術的應用均體現在自定義函數本身的實現里,用戶需要了解的只是SQL語言及其擴展PL/SQL語言的語法而不必去關心自定義函數的具體實現。
  在VSSDL中定義的九個自定義函數如下:
  ① void SS—login(user—name,passWord);
  遠程登錄到ORACLE數據庫
  ② void SS—create(sql—statement);
  執行建表操作
  ③ strUCt SPRimClass *SS—select(sql—statement);
  執行SQL查詢操作,以VSSDL 中數據類型SprimClass的形式返回值
  ④ void SS—insert(sql—statement);
  執行表數據插入操作
  ⑤ void SS—delete(sql—statement);
  執行表數據刪除操作
  ⑥ void SS—update(sql—statement);
  執行表數據修改操作
  ⑦ void SS—drop(sql—statement);
  執行表結構刪除操作
  ⑧ void SS—declare(pl/sql—statement);
  執行PL/SQL語句塊操作
  ⑨ void SS—logof();
  斷開與ORACLE數據庫的連接
  說明如下:
  a) 前八個函數的參數全是字符串類型的,第①個函數的兩個參數分別是登錄數據庫時的用戶名和口令,對第②到第⑧個函數進行調用時,用戶需將相應的SQL語句轉化成字符串的形式,如定義一個sql—statement語句如下:
  command := "select * from tdb001";
   注:command已在VSSDL中聲明為string型的local變量
  或command := "update tdb001 set chan—quanti=0,ungot—quant=0";
  b) 第③個函數SS—select(),它的返回值是結構 SprimClass型的,SprimClass是VSSDL本身定義的一種數據結構,用于跟外部C函數之間傳遞數據,作為SS—select()函數的返回值類型時,其相應的類型定義如下:
  class strtype
   {
  string s
  }
  若聲明一個變量str為strtype型的,則可用str->s來表示函數的具體返回值。

  c) 一個需要非凡說明的函數即第⑧個函數SS—declare(),它的參數是一個字符串型的PL/SQL語句塊。PL/SQL是SQL語言的擴展,具有過程性,可用來處理復雜的任務。在OCI程序中,使用PL/SQL塊可以:
   . 調用ORACLE存儲過程和存儲函數;
  . 把過程控制語句和幾個SQL語句相結合,作為一個單元來執行;
  . 使用非凡的PL/SQL功能,如光標操作和例外處理等。
  這一函數的定義大大增強了VSSDL語言操作ORACLE數據庫的功能。
  有了以上的九個函數,便可在VSSDL中編寫任何的SQL語句,包括SQL查詢語句、數據定義語句(DDL語句)、數據控制語句(DCL語句)和數據操縱語句(DML語句)。而如此強大的功能實現還要歸功于OCI接口的應用。
  以下將VSSDL用戶端稱為Client端,而將ORACLE RDBMS端稱為Server端。前面已經提到過Server端和Client&127;端首先要完成數據和信息的傳遞,因此對應于Client端的九個自定義功能函數,在Server端也應有其相應的OCI應用程序,它們執行Client端傳來的請求并返回應答結果,當Client端接收到結果后便呈現給了用戶。
  對應于VSSDL中的九個自定義函數,Server端的九個OCI處理函數如下:
  ① int O—login(fd,uid,lda)
  ② int O—create(lda,fd,create—string)
  ③ int O—select(lda,fd,select—string)
  ④ int O—insert(lda,fd,insert—string)
  ⑤ int O—delete(lda,fd,delete—string)
  ⑥ int O—update(lda,fd,update—string)
  ⑦ int O—drop(lda,fd,drop—string)
  ⑧ int O—declare(lda,fd,declare—string)
  ⑨ int O—logof(lda)
  其中,參數fd指socket句柄,它指明了一個提供此socket信息的描述符表入口,而Client端的9個自定義函數中所使用的socket句柄是一個全局變量socket—fd,這樣用戶就不必非常清楚具體的通訊信息了,目的是使用戶接口友好易用。
  Uid是指用戶名/口令;
  Lda是指登錄數據區;
  ...string是指各種SQL語句串。
  在這九個OCI處理函數的實現過程中根據實際需要調用了一系列的OCI接口子例程(函數),從而使得和后端的ORACLE數據庫打交道成為可能。(需要了解更具體的情況,請與本文作者聯系。)
  
  作者簡介: 張秀國 碩士,助教。主要研究方向為軟件工程環境和數據庫。
  作者單位: 山東礦業學院濟南分院 山東.濟南(250031)
      南陽理工學院河南.南陽(473009)
  
  參考文獻
  1.徐 紅,金茂忠.計算機應用生成系統的研究與實現.軟件學報,1997.8(增刊)
  2.孫宏昌編.PRO*C程序設計和Oracle調用接口.北京:清華大學出版社,1996.2
  3.張秀國.基于過程工程的治理信息系統開發技術及實現方法研究[碩士論文].北京航空航天大學研究生院,1998

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盈江县| 台前县| 安远县| 临湘市| 镶黄旗| 鄄城县| 毕节市| 襄垣县| 五常市| 达日县| 华亭县| 涪陵区| 霍山县| 沧源| 长丰县| 镶黄旗| 贵港市| 霞浦县| 普洱| 绥宁县| 安顺市| 曲周县| 尉氏县| 蛟河市| 乡城县| 磐石市| 中山市| 望谟县| 达日县| 比如县| 崇信县| 毕节市| 桂东县| 柳江县| 沅江市| 余干县| 建德市| 疏勒县| 临安市| 昌宁县| 成安县|