在本文中,我们将学习怎么样编写简单的 Perl 程序来提取或操作 IBM® DB2® Universal Database™(DB2 UDB)中存储的数据。我们将从一个简单的任务入手:从数据库中选择一行数据放入一个 Perl 程序中;接着逐步介绍一些高级主题,包括处理大对象和调用存储过程。
简介
Perl(Practical Extraction and Report Language)是一种功能强大而又非常简单易用的编程语言,在很多操作系统上都可以使用。Perl 是免费的。我们可以(以源代码或二进制的格式)下载这个语言,并可以免费地使用它。
Perl 日渐成为一种广受欢迎的语言。它包含了 C 编程语言的特性,以及 UNIX® 中的一些命令,例如 awk 和 sed。Perl 是一种解释语言,可以在单独的应用程序中使用,也可以与 Apache 一起来构建 Web 应用程序。
我们可以使用 Perl 快速操作来自文件或 RDBMS 的大型数据集。DBI 是在 Perl 脚本中连接 RDBMS 的标准,它是在 1994 年开始引入的。在 http://dbi.perl.org/ 站点上可以找到 DBI 驱动程序的源代码及其文档。
IBM 在 1992 年为 Perl 开发了 DB2 的驱动程序,并随着 DBI 规范的发展周期性地对其进行更新。这个驱动程序的最新版本(在撰写本文时)是 0.78。在 http://www.ibm.com/software/data/db2/perl/ 上可以找到主要的 DBD::DB2(这是 Perl 语言中采用的命名机制)驱动程序信息。
本文将展示怎么样编写简单的 Perl 程序来提取或操作 DB2 UDB 中存储的数据。我们将从一个简单的任务入手:从数据库中选择一行数据放入一个 Perl 程序中;接着逐步介绍一些高级主题,包括处理大对象和调用存储过程。
开始
图 1 展示了 Perl 环境怎么样与数据库环境进行交互: 图 1. Perl 环境

正如可以从这个图中看出的,Perl 程序使用了一个标准的 API 来与 DBI(Perl 的数据库接口模块)进行通信。Perl DBI 模块只能支持动态 SQL。它定义了一组方法、变量和约定来提供一个与实际使用的数据库独立的一致数据库接口。DBI 为 API 提供了一个一致的接口,它可以适用于程序员想使用的任何数据库。DBD::DB2 是一个 Perl 模块,当与 DBI 一起使用时,它就可以让 Perl 与 DB2 UDB 进行通信。
因此,为了运行访问 DB2 数据库的 Perl 脚本,需要在系统上安装以下组件:
- Perl 语言环境
- DBI 驱动程序(可以用于任何 RDBMS)
- DBD::DB2 驱动程序
- DB2 Runtime Client
- C 编译器
- DB2 数据库服务器的连接信息
在 http://www.ibm.com/software/db2/perl/ 的 Web 站点上可以看到所有的安装配置指南。
连接到 DB2 数据库上
为了让 Perl 程序访问 DB2 数据库,需要建立到数据库的连接。为了让 Perl 加载 DBI 模块,需要在 Perl DB2 应用程序中包含下面的内容:
use DBI;
当使用 DBI->connect 语句(语法如下)来创建一个数据库句柄 时,DBI 模块会自动加载 DBD::DB2 驱动程序。 清单 1. 创建数据库句柄
use DBI;
$dbh = DBI->connect (“dbi:DB2:dbalias", $UserId, $password);
|
其中:
| $dbh |
—— 表示 connect 语句所返回的数据库句柄 |
| dbalias |
—— 表示分类进 DB2 数据库目录中的 DB2 别名 |
| $userID |
—— 表示用来连接数据库的用户 ID |
| $password |
—— 表示这个用户 ID 的密码 |
清单 2 展示了一个简单的 Perl 程序,它建立到数据库 SAMPLE 的连接,并返回今天的日期。这个程序执行一条动态生成的 DB2 SQL 语句,从数据库中获取 CURRENT DATE。它使用 DBI -> bind_col 方法将数据库中的值传递到一个本地变量中,稍后我们就会讨论这个问题。 清单 2. 连接到数据库上并执行语句
#!/usr/local/bin/perl -w
use DBI;
use strict;
# Open a connection
my $dbh = DBI->connect("dbi:DB2:sample", “DB2ADMIN", “db2admin“, {RaiseError => 1});
# use VALUES to retrieve value from special register
my $stmt = "Values CURRENT DATE";
my $sth = $dbh->prepare($stmt);
$sth->execute();
# associate variables with output columns...
my $col1;
$sth->bind_col(1,\$col1);
while ($sth->fetch) { print "Today is: $col1\n"; }
$sth->finish();
$dbh->disconnect();
|
错误处理 —— SQLCODE 和 SQLSTATE
为了返回与某个 Perl DBI 数据库句柄或语句句柄相关的 SQLSTATE,可以调用
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页12 3 4 5 6 下一页
上一篇:基于DB2的数据库应用系统的性能优化 下一篇:IBM DB2数据库日常维护小常识
|