Oraperl是一個擴展的Perl允許訪問到Oracle數據庫。為了使oraperl函數定義在perl5使用,你需要安排到在每個文件或程序包使用'use“Oraperl.pm模塊。
為此,可以在每個文件或程序包簡單地增加Oraperl。
在腳本放在一個下麵一行:
eval 'use Oraperl; 1;' || die $@ if $] >= 5;
要了解oraperl模塊有以下重要的Perl函數。
&ora_login() - 用於登錄到Oralce數據庫。
&ora_open() - 被用來執行任意SQL命令。
&ora_bind() - 用於指定替代變量的實際值。
&ora_fetch() - 用於結合SQL SELECT語句從數據庫中檢索信息。
&ora_close() - 用於關閉ORALCE連接。
&ora_do() - 被用來作為一種替代&ora_open()和&ora_close()。
&ora_logoff - 使用oracle的退出。
還有其他的輔助功能,我們將在本次討論詳說。
為了訪問在Oracle數據庫的信息,程序必須首先登錄到該通過調用ora_login()函數。調用此函數有三個參數,使用的Oracle數據庫係統ID,Oracle的用戶名和密碼。返回的值是一個標識符實際上是一個Oracle的登錄數據區。
$lda = &ora_login($system_id, $username, $password)
這裡如果$system_id是空的,那麼這個調用將使用ORALDE_SID 或 TASK_TWO 環境變量來標識oracle係統。
$lda 是登錄數據區域,將用於所有後續調用中。
下麵的例子將連接數據庫的用戶名和密碼分彆作為guest,密碼guest123
my $system_id = "yiibaicom"; my $username = "guest"; my $password = "guest123"; #by www.gitbook.net $lda = &ora_login($system_id, $username, $password)
函數ora_open需要至少兩個參數: 登錄標識符&ora_login()和將要執行的SQL語句。可選的第三個參數指定使用一個SELECT語句高速緩存行的大小。
如果該行高速緩存的大小冇有指定,則使用缺省大小。因為分布式,默認為5行,但是這可能會在安裝已經改變。 檢查$ora_cache 變量.
$csr = &ora_open($lda, $statement [, $cache]);
從ora_open()返回的值是一個語句的標識符實際上是Oracle 遊標表現為$csr。
試一試以下的例子
$csr = &ora_open($lda, 'select ename, sal from emp order by ename', 10); $csr = &ora_open($lda, 'insert into dept values(:1, :2, :3)');
第二次調用ora_bind()函數變量的值將被取代。
如果SQL語句包含替換變量(見上麵的例子中的值:1:2:3)那麼提供實際值使用ora_bind函數。這需要聲明的標識符獲得ora_open()調用的第一個參數,其次是許多參數之必需聲明。
&ora_bind($csr, $var, ...);
試試下麵的例子中,上述INSERT語句提供值
&ora_bind($csr, 50, 'management', 'Paris');
ora_fetch函數配合一個SQL SELECT語句從數據庫中檢索信息。這個函數需要一個強製參數,從ora_open()獲得聲明的標識符。
在標量上下文中,該函數返回查詢所返回的字段的數量,但冇有數據被實際提取。
在數組環境中,該函數返回一個數組,包含的數據,每個字段一個元素。
# Calling in scalar context $nfields = &ora_fetch($csr); # Calling in array conext #by www.gitbook.net @data = &ora_fetch($csr);
每次調用這個函數會返回一個單列。 要獲取多個行多,在一個while循環裡你需要多次調用這個函數。
函數ora_fetch()數據結束時調用失敗或有一個錯誤發生。 這是能夠在區分這些情況下,所檢測變量$ora_errno的值。 數據結束時是一個零值,如果發生了一個錯誤那麼是非零值。
試試下麵的例子從數據庫中獲取值。
while (($deptno, $dname, $loc) = &ora_fetch($csr)) { warn "Truncated!!!" if $ora_errno == 1406; # do something with the data } warn $ora_errstr if $ora_errno;
如果不再需要執行SQL語句,那麼聲明的標識符應該被釋放。這可通過調用ora_close()函數的聲明的標識符作為其唯一的參數。
&ora_close($csr);
所有SQL語句不返回數據或包含替代變量。因此,在這種情況下,函數ora_do可用於&ora_open()和&ora_close()作為一種替代。
這個函數有兩個參數,登錄標識符和要執行的語句。
&ora_do($lda, $statement)
如下兩個例子也做同樣的工作:
ora_do:
&ora_do($lda, 'drop table employee');
ora_open 和 ora_close
&ora_close( &ora_open($lda, 'drop table employee') );
一個程序可以決定執行查詢的字段標題通過調用&ora_titles()。 這個函數接受一個參數,聲明的標識符和ora_open()指示需要查詢標題。返回一個字符串數組,每列的一個標題。
@titles = &ora_titles($csr);
一個程序可以查詢所返回的調用和ora_lengths()函數確定每個字段的長度。這個函數接受一個參數,聲明的標識符&ora_open() 指示的查詢為所需的長度。
@types = &ora_types($csr);
自動提交模式,在這模式下,每一個事務立即提交,一個顯式提交,使用ora_autocommit()函數可以無需等待可啟用或禁用。
&ora_autocommit($lda, $on_or_off);
這個函數有兩個參數,從&ora_login()登錄標識符和true/false值,該值指示是否要啟用自動提交(不為零)或禁止(0),默認情況下,關閉自動提交。
一個數據庫的修改可能會被提交或回滾可使用&ora_commit()和&ora_rollback()函數。這些函數接受一個參數,登錄標識符從&ora_login()獲得。
&ora_commit($lda); &ora_rollback($lda);
&ora_version()函數輸出Oraperl 的版本號和版權信息。它也打印了的各種編譯時間選項的值。
&ora_version();
此功能相當於Perl的-v標誌。
提供了6個特殊變量,$ora_cache, $ora_long, $ora_trunc, $ora_errno, $ora_errstr 和 $ora_verno.
$ora_cache: &ora_cache變量決定了默認的緩存大小,使用ora_open()函數的SELECT語句如果還冇有給出顯式高速緩存大小.
$ora_long: Oraperl查詢的數據庫,以確定每個字段的長度和分配緩衝空間。字段類型不可能為LONG或LONGRAW。根據可能的最大長度(65535字節)分配空間的內存顯然是極大的浪費。因此,當與ora_open()確定一個字段是LONG類型,它分配表示由$ ora_long變量所占的空間。
$ora_trunc: 由於Oraperl不能確切地確定一個LONG字段的最大長度, 它是可能的長度表示的$ ora_long不足以存儲取出的數據。在這樣的情況下,可選的第二個參數&ora_fetch()表示截斷是否應該被允許還是應該挑起一個錯誤。
如果第二個參數冇有指定,這個值的$ ora_trunc是作為默認值。這僅適用於LONG和LONGRAW數據類型。
$ora_errno : 包含Oracle錯誤代碼所引發的最後一個函數調用。
$ora_errstr: 包含$ ora_errno的當前值對應的Oracle錯誤消息。
$ora_verno: 包含版本號Oraperl的形式v.ppp其中v是主版本號和PPP是的patchlevel。