state 方法。例如,要返回与数据库句柄 $dbhandle 相关的 SQLSTATE ,可以在应用程序中使用下面的 Perl 语句:
my $sqlstate = $dbhandle->state;
为了返回与某个 Perl DBI 数据库句柄或语句句柄相关的 SQLCODE,可以调用 err 方法。例如,要返回与数据库句柄 $dbhandle 相关的 SQLCODE,可以在应用程序中使用下面的 Perl 语句:
my $sqlcode = $dbhandle->err;
errstr 方法返回与某个 Perl DBI 数据库句柄或语句句柄相关的 SQLCODE 的消息。我推荐使用这个方法,因为这个方法可以给出有关 SQL 语句失败的更多信息。
清单 3 中的例子展示了这个方法的用法:
清单 3. 返回错误消息的 errstr 方法
$dbh = DBI->connect("dbi:DB2:sample",“USERID",“password") or
die “Can't connect to sample database: $DBI::errstr";
$sth = $dbh->prepare(“SQL statement“) or die "Cannot prepare: " $dbh->errstr;
$sth->>execute() or die "Cannot execute: " $sth->errstr;
|
现在让我们进一步看一下第一个实验。它展示了一个 Perl 程序,这个程序使用作为参数传入的用户 ID 和密码来连接数据库 SAMPLE。当传递了有效的 ID 和密码时,它会返回一条消息说明连接成功了。下面是 lab1.pl 的代码:
清单 4. lab1.pl
#!/usr/local/bin/perl –w
use DBI;
$db2user = $ARGV[0];
$pasw = $ARGV[1];
# Open a connection
$dbh = DBI->connect("dbi:DB2:sample", $db2user, $pasw) or
“Can't connect to sample database: $DBI::errstr";
print "Connection is successful !!\n";
|
图 2 给出了使用有效身份验证和无效身份验证来执行这个程序的结果:
图 2. 执行 lab1.pl
执行 SQL 语句
下面让我们来编写一个程序,在数据库 SAMPLE 中创建一个表 PT_ADDR_BOOK。要执行在编写应用程序时就已经知道的 SQL 语句,可以使用 $dbh->do 方法。这个方法的语法如下所示:
my $cnt = $dbh->do(SQL statement);
其中 $cnt 是这条 SQL 语句所影响的行数。
使用这个方法,我们的程序创建了一个 DB2 表,如清单 5 所示:
清单 5. 用来创建 DB2 表的程序
#!/usr/local/bin/perl -w
use DBI;
use DBD::DB2::Constants;
$dbh = DBI->connect("dbi:DB2:sample","","") or
die “Can't connect to sample database: $DBI::errstr";
$rcount = $dbh->do (“CREATE TABLE PT_addr_book(name char(30),
phone char(10))");
print “Returns: $rcount\n";
|
可以使用相同的 do 方法向 PT_addr_book 表中插入几行数据。请注意,所插入行的值在编写这个程序时都是已知的,因此可以硬编码在代码中。
清单 6. 使用 do 方法插入几行数据
#!/usr/local/bin/perl -w
use DBI;
use DBD::DB2::Constants;
$dbh = DBI->connect("dbi:DB2:sample","","") or
die "Can't connect to sample database: $DBI::errstr";
$rcount = $dbh-> do ("Insert into PT_ADDR_BOOK values
('Gregory Whales','9142712020'),
('Robert Moses', 2127652345')");
print "Returns: $rcount \n";
|
正如从这个例子中可以看到的,这条 SQL 语句会影响两行数据。通过在 DB2 CLP 中对这个表运行 SELECT 语句,可以确定有两行数据已经插入了这个表中。
清单 7. test_do_exs.pl
$perl test_do_exs.pl
Returns : 2
$db2 “select * from PT_ADDR_BOOK"
NAME PHONE
------------------------------ ----------
Gregory Whales 9142712020
Robert Moses 2127652345
2 record(s) selected.
|
下面让我们从 下载 一节中实验 2 的练习开始,编写并执行一个简单的 Perl 程序来更新 PR_ADDR_BOOK 表。
INSERT、UPDATE 和 DELETE 语句 —— 没有占位符
执行一条在编写应用程序时还未确定的 SQL 语句(动态 SQL)需要使用一种不同的技术,可以使用 $dbh->prepare 方法来实现。动态 SQL 可以通过在程序执行过程中自己修改列、表和谓词(操作)的能力来实现。动态 SQL 需要由 UDB 优化器来准备 执行,目的是为这条语句创建一个访问计划。如果动态 SQL 没有参数标记(占位符),它就可以在这个步骤之后立即执行。清单 8 给出了
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:
基于DB2的数据库应用系统的性能优化 下一篇:
IBM DB2数据库日常维护小常识
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】