【问题标题】:Multistatement processing in Oracle via Perl DBI通过 Perl DBI 在 Oracle 中进行多语句处理
【发布时间】:2012-08-09 18:56:14
【问题描述】:

有没有办法我可以使用 Oracle / DBI / Perl 做这样的事情。

use DBI;
my $dbh = DBI->connect( oracle_stuff );
my $sql = <<EOF;
select current_timestamp(3) from dual;
select current_timestamp(3) from dual;
EOF
my $sth  = $dbh->prepare($sql);
print $sth->execute();

显然我想处理比 2 x current_datetimes 大得多的东西,但这是我的小例子。我不断收到错误消息:SQL 命令未正确结束 :-(

【问题讨论】:

  • 不认为这是可能的。但你为什么需要它?不能作为单独的语句来完成吗?
  • 我正在从 sybase -> oracle 移植大量代码...我真的希望能够使大部分 SQL 尽可能接近原始 SQL。我的例子有点误导......它不仅仅是多次执行相同的命令,而且一个命令可能是插入,下一个是删除等......

标签: perl oracle dbi


【解决方案1】:

prepare 语句正在等待一个 '?'喜欢在这里建议 DBI 包的文档http://search.cpan.org/dist/DBI/DBI.pm

例如:

$sth = $dbh->prepare('select current_timestamp(?) from dual')
$sth->execute(3);
$sth->execute(4);
$sth->execute(5);

等等……

【讨论】:

  • 是的......但我不想一遍又一遍地运行相同的代码 - 命令完全不同 - 即一个插入,一个删除,另一个插入等。
  • 如果语句不相关,则没有理由将它们作为一个整体组合在一起;如果它们是相关的,那么它们(就像)一个单一的交易;将 autocommit 设置为 false 并在最后一条语句之后提交(如果失败则回滚)。
  • @richardgreen 在这种情况下看起来 daxim 的链接很好https://metacpan.org/module/SQL::SplitStatement
猜你喜欢
  • 2017-06-24
  • 2015-10-31
  • 2013-11-17
  • 2010-11-17
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多