名稱

DBI::FAQ -- Perl5 資料庫介面的常見問題集

Perl5 資料庫介面的常見問題集

[ Hermetica ]

DBI 常見問題集 v.0.35
最後更動時間: 一月 14th, 1998


用法

    perldoc DBI::FAQ


版本

這份文件目前的版本為 0.35,日期是 一月 13 日,1998


說明

這份文件的目的是回答在 DBI 郵遞論壇上及 DBI 發展小組成員所收到的最常見問題。


基本資訊及其來源


1.1 什麼是 DBI, DBperl, Oraperl 以及 *perl?

DBI 的建構者及作者 Tim Bunce 說:

    "DBI 是給 Perl 語言用來連接資料庫的程式設計介面(API)。DBI API 規格中
     定義了一系列函數、變數以及用法,他們提供了一套連接資料庫的一致介面,
     不論實際上你所要連接的資料庫是那一種。"

簡言之,DBI 介面容許使用者透通地 (transparently) 連接多種類形的資料庫。所以 如果你連接到 Oracle、Informix、mSQL、Sybase 或任何其它的資料庫,你都無須了解 介面後運作的機制。因為 DBI 定義的 API 在這些資料庫上 可以運作。

一個相關的好處是,可以在同一個 perl 程式內連接兩個 不同廠牌的 資料庫, 意即,例如我要用一個程式從 Oracle 資料庫內讀出資料並將資料放進另一個 Informix 資料庫。DBI 介面就容許你輕易地作到它。

下圖描述了這個架構:

[ DBI Architecture ]

DBperl 是這個介面規格的舊名稱。現在它通常被用來稱呼 perl4 用的資料庫介面 模組,例如,oraperlisqlperlingperl 等等。這些介面沒有一個標準的 API 並且一般來說都 被支援。

以下是一份舊 DBperl 的列表,以及他們相對應的 DBI 部份和其支援者的資訊。請記住 ,下列的這些作者 未必是 替相同資料庫維護 DBI 模組的人。這些 email 住址並不可 靠,他們只應該被用來當作查詢下列 perl4 模組相關資訊之用途。DBI 驅動程式的資料應 該直接在 dbi-users 郵遞論壇上詢問。

  Perl4 名稱  資料庫            作者                    DBI 驅動程式
  ----------  --------          ------                  ----------
  Sybperl     Sybase            Michael Peppler         DBD::Sybase
                                <mpeppler@itf.ch>
  Oraperl     Oracle 6 & 7      Kevin Stock             DBD::Oracle
                                <dbi-users@fugue.com>
  Ingperl     Ingres            Tim Bunce &             DBD::Ingres
                                Ted Lemon
                                <dbi-users@fugue.com>
  Interperl   Interbase         Buzz Moschetti          DBD::Interbase
                                <buzz@bear.com>
  Uniperl     Unify 5.0         Rick Wargo              None
                                <rickers@coe.drexel.edu>
  Pgperl      Postgres          Igor Metz               DBD::Pg
                                <metz@iam.unibe.ch>
  Btreeperl   NDBM              John Conover            SDBM?
                                <john@johncon.com>
  Ctreeperl   C-Tree            John Conover            None
                                <john@johncon.com>
  Cisamperl   Informix C-ISAM   Mathias Koerber         None
                                <mathias@unicorn.swi.com.sg>
  Duaperl     X.500 Directory   Eric Douglas            None
              User Agent

然而,某些 DBI 模組有 DBperl 模擬層,所以,像 DBD::Oracle 就有付 Oraperl 模擬層,它容許你在不經更動的情況下執行你的 oraperl 程式。這模擬層將 oraperl API 的呼叫轉成相對應的 DBI 呼叫。

以下就列出各模擬層的資訊:

    模組            模    擬    層      狀  態
    ------          ---------------     ------
    DBD::Oracle     Oraperl             完整
    DBD::Ingres     Ingperl             完整
    DBD::Informix   Isqlperl            發展中
    DBD::Sybase     Sybperl             可用嗎? ( 須要驗證 )
    DBD::mSQL       Msqlperl            實驗性地與 DBD::mSQL-0.61 一起發表

Msqlperl 模擬層算是特例。Msqlperl 是給 perl5 用的 mSQL 資料庫驅動程式, 但是與 DBI 規格並不一致。在 DBD::mSQL 出現後,已經不鼓勵使用 Msqlperl 了。 Msqlperl 可以 經由 下列網址自 CPAN 取得:

    http://www.perl.com/cgi-bin/cpan_mod?module=Msqlperl


1.2. 我可以從哪拿到它?

DBI 主要是從此處公布的:

    ftp://ftp.demon.co.uk/pub/perl/db

你可以從 CPAN 裡面取得這些驅動程式的最新版本。最近的 CPAN 站可以透過 Tom Christiansen 神奇的 CPAN 自動分配 程式連接,它在:

    http://www.perl.com/CPAN/

若要找特定版本的資訊以及驅動程式的精確 URL,請參看 DBI 驅動程式列表以及 DBI 模 組首頁,其位置在:

    http://www.hermetica.com/technologia/perl/DBI


1.3. 我可以在哪找到更多資訊?

網路上有一些關於 DBI 的資訊。

DBI 規格
    http://www.hermetica.com/technologia/perl/DBI/doc/dbispec

此處有兩份規格,新的 DBI 草案規格是 Tim Bunce 與其發展小組積極推向一個穩定介面 的文件,更新速度很快,而舊的 DBperl 規格則是今日 DBI 介面演進的歷史根源。

後者應該被當作歷史事蹟而非程式設計手冊之類的正式文件來看待。 然而,他仍然是一份很有用的參考文件。

POD 文件
POD 是一種文件形式,他通常與 perl 程式放在一起以解釋程式碼的意義,提供有用的 資源給使用者和程式設計師。DBI 的 POD 格式文件以及驅動程式已經越來越常見了,這些 模組的文件可以用以下的指令來閱讀。

DBI 規格
以下的指令可以用來閱讀 DBI 規格的 POD 格式文件:

    perldoc DBI

常見問題集
就是這份文件,常見問題集 也有 POD 格式的版本! 你若要在自己的系統上閱讀,可打:

    perldoc DBI::FAQ

這對於那些沒有固定地連接到網際網路的人們來說比較方便,但文件的版本未必是最新的。

Oraperl
使用 DBD::Oracle 內的 Oraperl 模擬層的人可以藉由以下指令讀讀如何使用 Oraperl 介面寫程式:

    perldoc Oraperl

這會將 Kevin Stock 為 perl4 寫的 oraperl 說明文件升級。在文件中也詳盡列出了 oraperl API 的內容。

DBD::mSQL
使用以下指令就可以閱讀與 DBD::mSQL 相關的函數與驅動程式使用技巧:

    perldoc DBD::mSQL

關於 POD
下列指令可以得到關於如何撰寫 POD 格式文件,以及 POD 所牽涉到的觀念:

    perldoc perlpod

如果你安裝了 Tk 模組,那麼也許你會對一個叫 tkpod 的 POD 閱讀程式感到有興趣, 他是根據 Tk 寫的並把 POD 轉換成一種簡單易讀的格式。

[譯註]譯者寫過一篇 POD 的中文介紹,其 url 在

    http://www.math.ncu.edu.tw/~chenym/FAQ/Perl/POD/pod.html

Rambles, Tidbits and Observations
    http://www.hermetica.com/technologia/perl/DBI/tidbits

在 DBI 郵遞論壇上有一系列不同作者的文章,原意是要澄清一些觀點, 最後變成一篇篇相當清楚易懂的文件。這些文件的品質並不一至, 但是它們的確提供了一些發展這些介面時的想法。

``DBI -- perl5 資料庫介面''
這篇文章是由 Alligator Descartes 及 Tim Bunce 寫的,主題是關於 DBI 的結構。他被 刊登在第五期的 ``Perl 期刊''。這篇文章 非常地 好。去買本來看看吧。事實上, 每一期你都應該買! ``Perl 期刊'' 的首頁網址為:

    http://www.tpj.com

``DBperl''
這篇關於 DBperl 的文章被刊登在 1996 年 11 月號的 ``Dr. Dobbs 期刊''。此文章的 作者顯然不想為了求證其文章內容而打擾 DBI 發展小組成員。在 dbi-users 郵遞論 壇上對此文章的反應都是頗負面的。事實上這篇文章說的是關於 DBperl 的過期資訊而 非 DBI 的消息。然而,為了保持完備性,我們還是把他納入參考文章之一。

``Perl5 資料庫介面''
這裡討論的是將在今年冬天由 O'Reilly and Associates 出版的書,作者是 Alligator Descartes ( 就是本 FAQ 的作者 )。

以下就是本書的目錄。

     * Introduction
          + Databases
          + CGI / WWW
          + perl
     * Basic Database Concepts
          + Types of Database
               o Flat File
               o AnyDBM
               o RDBMS
          + Using Which Database For What...
     * SQL
          + Why SQL?
          + Structuring Information In Databases
          + Retrieving Data From Databases
          + Manipulating Data and Data Structures
     * DBI Architecture
     * Programming with DBI
          + DBI Initialization
          + Handles
               o Driver Handles
               o Database Handles
               o Statement Handles
          + Connection and Disconnection
          + Handling Errors
          + Issuing Simple Queries
          + Executing Atomic Statements
          + Statement MetaData
          + More perl-ish Statements
          + Binding
          + Transaction Handling
          + Utility Methods
          + Handle Attributes and Dynamic Variables
     * DBI and ODBC
     * The Database Drivers
          + DBD::Oracle and oraperl
          + DBD::Informix and isqlperl
          + DBD::mSQL and Msqlperl
     * Case Studies
          + DBI and the WWW
          + Data Migration and Warehousing
          + Administration Software
     * Appendix: API Reference / Specification
     * Appendix: Resources

README 檔案
每個驅動程式附的 README 檔案有時會包含對使用者非常有用的資訊 ( 是真的! )。請 閱讀他們。他使得我們卑微的存在更能令人接受。這些文件都可以在主 DBI 首頁上看到:

    http://www.hermetica.com/technologia/perl/DBI

郵遞論壇
以下是三個由 Ted Lemon 所維護的關於 DBI 的郵遞論壇。你可以 透過 以下的 url 來訂閱或退訂他們:

    http://www.fugue.com/dbi

如果你無法成功地使用上面那個表格,請遵循以下方法訂閱他們:

    Email: 'dbi-XXX-request@fugue.com' 信的內容裡寫: 'subscribe'

'dbi-XXX' 就是你有興趣的郵遞論壇的名稱。但記住你的請求會由人工處理並因此而拖延 一點時間。

以下是使用者可以加入的論壇:

dbi-announce
這個論壇是用來發布公告的。很少有信件。這些公告通常也會被張貼在主 DBI 首頁。

dbi-dev
這個論壇是給發展者討論關於 DBI 介面的點子和觀念,API 以及驅動程式機制的。只有開 發者或有興趣的人在用。也很少信件。

dbi-users
這個論壇討論較一般的話題,包括臭蟲回報,問題討論以及一般事項。信件量中等。

郵遞論壇檔案庫
美國的郵遞論壇檔案庫
    http://outside.organic.com/mail-archives/dbi-users/

這三個郵遞論壇的可搜尋 hypermail 檔案庫,還有一些古老的信件可讓使用者瀏覽。

歐洲的郵遞論壇庫
    http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Interest

與上面提到的美國檔案庫相同。


編譯上的問題


2.1. 編譯上碰到的問題或是 "測試失敗!"

首先,參考關於此模組的線上資訊,像 DBI 或是某種 DBD,看看這是否在你用的平台上是 個已知的編譯問題。上述這些文件都可以在下列 url 裡找到:

    http://www.hermetica.com/technologia/perl/DBI

如果確定他是已知的問題,你可能要等到有人修正他。如果你 真的 需要修正他,不妨 試試下列的動作:

嘗試自行修改
對於那些易大驚小怪的人,實在 不適合 用此方法。如果你認為已經修好他,那麼就送 個修補檔案 [patch file] ( 依內容差異 [context diff] ) 給作者,並附以下說明事項:

送信給作者 Do NOT whinge!
請將關於不同驅動程式的電子郵件寄到列在首頁上的位置。不要 直接寄給作者,除非 他的電子郵件住址就是列在首頁上的那個。有些作者,包括 Tim Bunce,非常不希望在他 們的私人信箱裡收到這類信件。

我們有許多工作要作,我們也有在注意郵遞論壇上提出的問題。除此之外,我們也許沒有 <你所愛用的平台> 所以無法幫上任何忙! 如果這聽起來有點無情,我們對此深感歉意 ,但這也是實際情況。

然而,也許你會在凌晨三點碰到我們之中的一個奇才,並且在五分鐘內得到修補問題的方法 。這個縈繞在 DBI 圈圈裡的氣氛就是我們 的確 注意使用者的問題,因為我們都在相似 的環境裡工作。

如果你還是準備要寄信給作者,請儘量提供更多的資訊,例如:

請記住,你若提供越多資訊,我們就有機會越快追蹤出問題所在。 如果你寄給我們無用的訊息,那也不用期待任何回音。

送信給 dbi-users 郵遞論壇
送一份問題郵件的副本給郵遞論壇是個很好的主意。 作者們都會讀這些論壇,所以你寄一份副本去也不會有損失。


與平台和驅動程式相關議題


3.1 ODBC 和 DBI 的差異在哪裡?

好問題! 不過在此處尚未有更詳盡的答案時,請參考 DBI README 檔案的尾端。


3.2 Windows 95 / NT 平台有支援 DBI 嗎?

終於有了! Jeff Urlwin 已經致力於在這些平台上建構 DBIDBD::Oracle,並且 隨著更穩定的 perl 和 MakeMaker 的移植,這個計劃進展相當順利。

最新的 DBIDBD::Oracle 模組可以隨著標準的 perl 5.004 (或更新) 版本建構 並在 Win32 平台執行。

如果你用的是舊的且非標準的 ActiveWare 移植的 perl,你就無法使用標準的 DBI 與 DBD::Oracle 模組。下列的 url 可以找到要做些什麼改變以及修補前的版本:

    http://www.hermetica.com/technologia/perl/DBI/win32


3.3 我可以用 DBI 連接 Microsoft Access 或 SQL Server 資料庫嗎?

    本段由 Tim Bunce 與 Jeff Urlwin 回答

在 DBI-0.79 之後的版本中包含了一個可用 Win32::ODBC 模組的 DBI 實驗性'模擬層' 。他叫做 DBI::W32ODBC 同時他也非常小,你會需要先從下列 url 取得 Win32::ODBC 模組。

    http://www.roth.net

因為他在實驗階段,所以如果回報的問題沒有附上修正方法的話就可能被忽略掉。你也會 需要 Jeff Urlwin 提供的 Win32 DBI 修補工具組,他的位置在上一問題的答案中。

回到正題上來,理論上來說,是的,你可以用 DBI 透過 ODBC 來連接 Microsoft Access 和 SQL-Server 資料庫!


3.4 是否有給 某資料庫 用的 DBD 呢?

在 DBI 驅動程式首頁上有列表嗎?

    http://www.hermetica.com/technologia/perl/DBI/DBD

如果沒有,那就是沒有。在此頁上缺席的資料庫驅動程式代表還沒人有興趣發展他。

從上面的論述可以推斷出如果你看到有人發表某個 不在 上頁的驅動程式,很有可能他 並非是個真正遵從規格的 DBI 驅動程式。因此關於這類驅動程式的問題 請不要 丟 到 DBI 郵遞論壇上來。


3.5 什麼是 DBM? 為何我應該用 DBI 取代之?

自 ``DBI - Perl 5 的資料庫介面'' 中節錄:

    ``UNIX 剛開始時就有個檔案式 ``資料庫'',就是 dbm 系統。dbm 容許你將資料存在
    檔案中,並快速地取出來。然而,他也有以下的幾個嚴重弱點。

        File Locking

        dbm 系統並沒有一個特別強健的 file locking 能力,也無法糾正當同時有多重
        資料庫寫入動作時所帶來的問題。

        Arbitrary Data Structures

        dbm 系統只能使用一種資料結構:
        有索引值的資料對 [key-value pairs]。索引值可以是複雜的物件,例如一個
        [ C ] 的結構,但是其值必須是唯一的。這是整個 dbm 系統實用性上的一個大
        限制。

    儘管如此,dbm 系統仍然提供很大的用處給那些擁有簡單的資料及受限制的資源的使
    用者,因為它快,強健並且絕對是通過完善測試的。在 Perl 裡用來連接 dbm 系統的
    模組已經整合到 Perl 核心裡的 AnyDBM_File 模組內了。''

結論是,DBM 對於以讀取為主的資料庫或是小而簡單且單人使用的情況來說是個令人滿意 的解決方案。然而若要擁有更有力且可變尺度的資料集,加上強健的交易鎖定 [robust transactional locking],還是要推荐使用者使用 DBI


3.6 mSQL-2 何時才會被支援?

DBD::mSQL-0.61 中,就已經有支援 mSQL-2了。然而,目前還沒有新的關於索引 支援的方法加入 mSQL 程式庫核心。他們將會出現,並且透過 via func() 私有方 法來擷取。你可以在 DBD::mSQL 的 POD 裡面找到更多關於這些私有方法的說明,請打:

    perldoc DBD::mSQL

當然,得先安裝好 DBD::mSQL 才行。


3.7 你推荐我使用那種資料庫呢?

在這個特別艱難的領域中,很難產生出一個客觀的答案,因為不同的人會有相異的使用量與 系統需求。

從目前作者的眼光來看,如果資料量相對地小,意即 tables 少於一百萬列,資料庫裡少於 一千個 tables 的話,mSQL 是個完美可接受的選擇。因為這個資料庫價錢非常便宜,又 具備不可思議的強韌性並且有良好的支援。你可以到下列 Hughes 科技公司的網址取得更多 資料:

    http://www.hughes.com.au

如果資料量比剛提的多,或是如果你有更多錢或更大的機器,我會推荐你用 Oracle RDBMS。Oracle 的網站提供了更多更好的資訊。

    http://www.oracle.com

Informix 是另一種值得考慮的高階 RDBMS 。關於他與 Oracle 的差異性,在此很難作 詳細的比較。你可以去 Informix 的網站上找 Informix 的相關資料:

    http://www.informix.com

若你打算以 WWW 作為應用程式的前端,mSQL 或許是個更好的選擇,因為 CGI 程式與 Oracle RDBMS 間的通訊緩慢,且每個與 Oracle 的通訊會耗掉較多的系統資源這兩點原因 。而 mSQL 是個資源耗用較少且較快的選擇。

這些意見並不代表任何人的立場或是反映任何公司的支援或觀點。他們只是參考意見而已。


3.8 <某項特徵> 在 DBI 中有支援嗎?

我們推測你想要的特徵可能是一些非標準且與資料庫個別相關的,所以答案是 沒有

DBI 代表的是一個 一般性的 API,能夠與大多數的資料庫合作,並且沒有與特定資料庫 相關的功能被定義在其中。

然而,驅動程式的作者如果想的話,可以透過 DBI API 裡定義的 func() 方法將一些 特定資料庫才有的功能掛上去。而應用程式發展者應當注意的是這些 經由 func() 方法提供的功能是不太可能移植到其他資料庫上的。


程式上的問題


4.1 DBI 對 CGI 程式設計有任何用處嗎?

一句話,是的! DBI 對 CGI 程式設計有很大的用處! 事實上我會說 CGI 程式設計就是 DBI 兩大用途之一。

DBI 所擁有的能力使得 CGI 程式設計師能替他們的使用者開啟 WWW 與資料庫間的通道, 提供大量的資料讓使用者玩。DBI 提供的另一個可能性是如果資料庫伺服器的負荷太大了 ,那麼他們可以在不更動 CGI 程式的情況下升級後端的資料庫伺服器。


4.2 我如何用 DBD::Oracle 和 CGI 提供更短的連線時間呢?

    由 John D. Groenveld 所提供。

Apache httpd 提供了一群 <httpd> 子程序來服務客戶端的要求。

使用 Doug MacEachern 寫的 Apache mod_perl 模組,他把 perl 直譯器嵌入 子 httpd 中。所以 CGI、DBI 以及其他你需要的模組都可以在每個子程序啟動時一起 載入。這些模組除非在磁碟上有更動,否則不會再被重新載入。

參看 Apache 計劃的網站以獲得更多關於 Apache 的資訊:

    http://www.apache.org/

你可以用下面的方法從 CPAN 抓取 mod_perl:

    http://www.perl.com/cgi-bin/cpan_mod?module=Apache


4.3 我如何用 CGI 與 DBI 取得持續的連接 [persistent connection]?

    由 John D. Groenveld 所提供。

使用 Edmund Mergl 的 Apache::DBI 模組,簽入資料庫的資料都會存在每個子 http 的一個雜湊陣列中。如果你用單一資料庫使用者簽入,那此通訊便會和每個子程序一起啟動 。目前,資料庫的連接無法讓子 httpd 之間共享。

可以透過下列位置從 CPAN 抓取 Apache::DBI:

    http://www.perl.com/cgi-bin/cpan_mod?module=Apache::DBI


4.4 ``我的 perl 程式在命令列下能執行,但不能被 httpd 執行!'' 為什麼?

這通常是因為你用來執行此程式的使用者身份具備了完善的環境變數設定,以 DBD::Oracle 來說,這些變數有 $ORACLE_HOME$ORACLE_SID$TWO_TASK

http 程序通常是以 nobody 的身份來執行,意及他的環境變數設定可能不完整。 任何想在此環境下執行的程式都一定會失敗。

要解決這問題,在你程式的開頭用一段 BEGIN { } 來替你的資料庫設定環境變數。這樣 通常就會解決你的問題了。

同樣地,你應該檢查 http 錯誤訊息紀錄檔中是否有任何線索,還有參考珍貴的 ``Idiot's Guid To Solving Perl / CGI Problems'' 及 ``Perl CGI 程式設計 FAQ''。因 為這問題看來不像是與 DBI 有關係的。

你可以在下列位置找到 ``Idiot's Guide To Solving Perl / CGI Problems'':

    http://www.perl.com/perl/faq/index.html

以及 ``Perl CGI 程式設計 FAQ''。請仔細地閱讀這兩份文件! 他們可能可以替你省下好幾 個小時的工作時間。

[譯註]中文版的 Perl CGI 程式設計 FAQ 可以在下列 url 找到:

    http://www.math.ncu.edu.tw/FAQ/Perl/perl-cgi-faq/pcp_faq.html


5.1 我可以在 DBI 中用多緒處理 (multi-threading) 嗎?

在此 FAQ 完成時 ( 請參看文件最前面 ),答案是不能。perl 本身尚未支援多緒處理。 然而,5.005 版的 perl 應該會將此功能納入,到時 DBI 應該就會很快跟進了。

在下面的 url 中,你可以抓到一些 Oracle 用的 OCI 範例檔,他們有做到多緒處理 SELECT 敘述:

    http://www.hermetica.com/technologia/oracle/oci/orathreads.tar.gz


5.2 我如何用 DBI 處理 BLOB 資料?

目前無進一步的資料。


5.3 我如何用 DBI 執行 stored procedures?

目前並沒有標準的方法可以從 DBI 裡呼叫 stored procedures。然而,如果你用的資料庫 容許你用 SQL 去呼叫 stored procedures 的話,那他用的 DBI 和 DBD 驅動程式也可能 支援。

例如,假設你在一個 Oracle 資料庫裡創造了一個 stored procedure,你就可以用 $dbh->do() 立即執行這個 procedure:

    $dbh->do( "BEGIN someProcedure END;" );     # 針對 Oracle 


5.4 在 DBI 中我如何得到 stored procedures 傳回的值?

    註: 這是針對 Oracle。由 Jeff Urlwin 所貢獻的

    $sth = $dbh->prepare( "BEGIN foo(:1, :2, :3); END;" )  # Oracle specific
               || die $sth->errstr;
    $sth->bind_param(1, $a) || die $sth->errstr;
    $sth->bind_param_inout(2, \$path, 2000)    || die $sth->errstr;
    $sth->bind_param_inout(3, \$success, 2000) || die $sth->errstr;
    $sth->execute || die $sth->errstr;

注意錯誤判斷的部份,看來好像是多餘的,但是在需要花很長時間執行的情況下,他可能 替你省下幾小時的時間。參考 DBI 文件中 $sth->{RaiseError} 和 $sth->{printError} 的說明以了解如何用較簡單的方法達到相同效果。


5.5 我如何用 DBI 創造或丟棄一個資料庫?

資料庫的產生與刪除這觀念太抽象以致於 DBI 無法適當地支援他。例如,Oracle 並不支援 丟棄資料庫這個觀念! 同時,在 Oracle 中,資料庫 伺服器 基本上就 相當於 資料 庫,而在 mSQL 的情況則是,伺服器的程序就算上面沒有資料庫,照樣跑得很好。這個問題 具有太大的差異性以致於無法輕易地解決。

因此,有些驅動程式,透過私有的 func() 方法來支援資料庫創造和刪除。你應該看看 你所使用的驅動程式之說明文件,確定他是否支援此一機制。


5.6 我如何在 DBI 中 commitrollback 一個敘述?

在這裡有更多答案之前,請參考 DBI 文件中關於 commitrollback 的方法。


5.7 DBI 如何處理 NULL 值?

在 DBI 中處理 NULL 值的方式就像處理 undef 值一樣。NULL 可以用 NULL 插入資料庫中,例如:

    $rv = $dbh->do( "INSERT INTO table VALUES( NULL )" );

但取值回來時,依然應該測試一下確定是 NULL 不是 undef。這是所有驅動程式共用 的標準。


5.8 那些 func() 方法是做什麼用的?

func() 方法被定義在 DBI 裡面用來利用資料庫特定的功能,例如,創造或丟棄資料 庫的能力。要採用這些與驅動程式相關的方法很容易,例如,要用 createDatabase 這 個有一個參數的功能,我們只要寫:

    $rv = $dbh->func( 'argument', 'createDatabase' );

軟體開發人員須注意 func() 這方法在不同資料庫間並不具備可攜性。


支援與教育訓練

Perl5 資料庫介面是 免費 軟體。他並不帶有任何種類的保證。請參考 DBI README 及 DBI 文件的內容。

不過,有些機構有提供 DBI 的技術支援以及教育訓練課程。作者並不清楚這些服務的品質 如何。以下列出的連結點僅供參考。


商業性支援

The Perl Clinic
Perl Clinic 可以替你安排與 PerlDBIDBD::Oracle 以及 Oraperl 相關 的商業性支援合約。這些支援來自 DBI 及 DBD::Oracle 的作者 Tim Bunce 工作的公司。 想知道更多關於他們的服務的資訊,請參考:

    http://www.perl.co.uk/tpc


教學

目前已知並無任何教學課程。


其他參考資訊

在此,我們挑出一些 WWW 連結點,可能有些 DBI 使用者會對他們產生興趣。這些連結並未 事先驗證所以可能會有連結不到的情況產生。

    http://www-ccs.cs.umass.edu/db.html
    http://www.odmg.org/odmg93/updates_dbarry.html
    http://www.jcc.com/sql_stnd.html


作者

Alligator Descartes <descarte@hermetica.com>


譯者

陳彥銘 <chenym@ms1.hinet.net>


作者版權宣告

This document is Copyright (c)1994-1997 Alligator Descartes, with portions Copyright (c)1994-1997 their original authors. This module is released under the 'Artistic' license which you can find in the perl distribution.

This document is Copyright (c)1997 Alligator Descartes. All rights reserved. Permission to distribute this document, in full or in part, via email, Usenet, ftp archives or http is granted providing that no charges are involved, reasonable attempt is made to use the most current version and all credits and copyright notices are retained ( the AUTHOR and COPYRIGHT sections ). Requests for other distribution rights, including incorporation into commercial products, such as books, magazine articles or CD-ROMs should be made to Alligator Descartes <descarte@hermetica.com>.


譯者版權宣告

本文中文翻譯版權屬於譯者所有。譯者保留所有相關權利。 允許在下列情況下完整或部份散播此文件,包括: 必須保留作者、譯者姓名及其版權宣告。若以電子文件形式於網路上傳播, 不得收取傳播費用。以其他方式傳播之權利須先經過譯者同意後方得實行之, 例如置入商業產品中,包括書本、雜誌文章或是光碟片上。 陳彥銘 <chenym@ms1.hinet.net>。


© 1995-97 Hermetica
Alligator Descartes - Hermetica