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。