$dbh->prepare 和
$sth->execute 方法的语法,可以在 Perl 程序中用来执行没有占位符的嵌入式 SQL 语句:
清单 8. 动态 SQL 的准备和执行
$stmt = “SQL Statement without placeholder“;
$sth = $dbh->prepare($stmt);
$sth->execute();
|
请注意,$dbh->prepare 方法的结果是 SQL 语句句柄。
清单 9 中给出的 Perl 程序展示了怎么样使用这些方法将一行数据插入到 PT_ADDR_BOOK 表中:
清单 9. 插入一行数据
#!/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";
$stmt = "INSERT INTO PT_addr_book values ('JOHN SMITH','9145556677')“;
$sth = $dbh->prepare($stmt);
$sth->execute();
print "We inserted row into addr_book\n";
$sth->finish();
|
具有参数标记的 SQL 语句
现在让我们来看一下怎么样执行在编写应用程序时还不确定并且具有参数标记(即占位符)的 SQL 语句 —— 即真正的动态 SQL 语句。请注意,我们推荐使用这种 SQL 语句,因为它们具有性能和安全性方面的优点。从性能的角度来看,动态 SQL 语句只需要准备一次就可以执行多次,可以重用相同的数据库访问计划。从安全性的角度来看,占位符可以确保只有一个值可以插入到这条语句中,从而可以避免出现 SQL 语句错误。
为了让 Perl 程序将动态 SQL 语句转换成可执行的格式,需要首先使用 prepare 方法,然后使用 bind_param 方法来绑定参数。只有这样才可以执行这条语句。要绑定每个参数,需要指定参数标记的个数,以及包含这些参数标记值的本地 Perl 变量的名字。清单 10 给出了让 Perl 程序执行动态 SQL 语句所使用的方法的语法:
清单 10. 动态 SQL 的方法
$stmt = “SQL Statement with parameter marker“;
$sth = $dbh->prepare($stmt);
$sth->bind_param(1,$parm,\% attr);
$sth->execute();
|
清单 11 展示了对表 PT_ADDR_BOOK 执行 INSERT 操作的方法。现在,所插入列的值不再是在 SQL 语句中硬编码的了,而是使用参数标记动态传递给这条语句的;这些参数标记已经使用 $sth->bind_param 方法与这条语句进行了绑定。只有完成这些设置之后,才开始执行这条语句。
清单 11. 对表 PT_ADDR_BOOK 执行 INSERT 操作
#!/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";
$name ="STEVE BROWN";
$phone = "7184358769";
$stmt = "INSERT INTO PT_addr_book values (?,?)";
$sth = $dbh->prepare($stmt);
$sth->bind_param(1,$name);
$sth->bind_param(2,$phone);
$sth->execute();
print "We inserted row into addr_book\n";
$sth->finish();
|
从数据库中检索数据 —— 单个结果
为了将数据库中的值放到 Perl 程序中使用,需要按照下面的步骤执行:
- 准备 SELECT 语句。
- 执行所准备的语句。
- 使用 $sth->bind_col 方法把某列的值(或函数)关联到一个本地 Perl 变量上。
- 使用 $sth->fetch 方法将一个值取到本地变量中。
下面的伪码展示了怎么样从数据库中检索单个值:
清单 12. 从数据库中检索单个值
$stmt = “SQL SELECT Statement to be executed“;
$sth = $dbh->prepare($stmt);
$sth->execute();
$result = $sth->bind_col(col, \variable [, \%attr ]);
while ($sth->fetch){
process result of the fetch;
}
|
下面这个例子展示了怎么样为一个聚合函数 max 从 EMPLOYEE 表中检索 salary 的值:
清单 13. 为聚合函数检索值
#!/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";
$stmt = "SELECT max(salary) from EMPLOYEE";
$sth = $dbh->prepare($stmt);
$sth->execute();
#associate variable with output columns...
$sth->bind_col(1,\$max_sal);
while ($sth->fetch) {
print "The biggest salary is: $max_sal\n";
}
|
下面是执行这个 Perl 程序后的结果:
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:基于DB2的数据库应用系统的性能优化 下一篇:
IBM DB2数据库日常维护小常识
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】