1

我需要使用 Perl DBI 对 Oracle 数据库执行 SQL 文件。通过快速搜索,我找到了一些逐行执行 SQL 文件的解决方案,但我想像在 SQL Developer 中一样加载整个文件中的 SQL。

在 SQL Dveloper 或 SQL*Plus 命令行中我可以执行;

@/path/to/file.sql;

如果我在 Perl 中执行此语句,如下所示

my $query = "@/path/to/file.sql";
my $sth  = $dbh->prepare($query)
        or die "Couldn't prepare query: ". $dbh->errstr;    
$sth->execute();

我得到错误:ORA-00900: Invalid statement

4

2 回答 2

1

sqlplus 在处理文件时,会在读取行尾的分号 (';') 或行上的正斜杠 ('/') 时执行 SQL 语句。如果你想用 perl 和 DBI 处理它,你必须以相同的方式拆分语句并一次执行它们,去掉'/'和';' 在你执行之前。请记住,'execute some_stored_procedure()' 是 sqlplus 语句,而不是 SQL 语句,您必须在 DBI 中执行之前对其进行扩展(参见 DBD::Oracle)。

另外,如果你这样做,你不需要prepare()和execute(),你只需要do()。

于 2012-08-23T16:16:35.430 回答
-3

这个问题可能意味着是否可以使用 DBI 将文件批量加载到数据库中。

可能吗?我尝试执行以下操作:

use DBI;
my $dbh = DBI-> connect('dbi:ODBC:test','test','test');
my $sql="@\test.sql";
$dbh->do($sql);

我的当前目录中有 test.sql 和一个简单的 sql 语句。

我需要这个用于新的 odbc 测试驱动程序并将其安装到一些测试框架中。谢谢。

于 2014-08-16T00:15:17.410 回答