在本文中,我们将学习如何编写简单的 Perl 程式来提取或操作 IBM® DB2® Universal Database™(DB2 UDB)中存储的数据。我们将从一个简单的任务入手:从数据库中选择一行数据放入一个 Perl 程式中;接着逐步介绍一些高级主题,包括处理大对象和调用存储过程。

简介

Perl(Practical Extraction and Report Language)是一种功能强大而又很简单易用的编程语言,在很多操作系统上都能够使用。Perl 是免费的。我们能够(以源代码或二进制的格式)下载这个语言,并能够免费地使用他。

Perl 日渐成为一种广受欢迎的语言。他包含了 C 编程语言的特性,连同 UNIX® 中的一些命令,例如 awksed。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 环境

正如能够从这个图中看出的,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();

            

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!