Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Perl DBI执行整个SQL文件,就像在Oracle SQL Developer中一样_Perl_Oracle_Sqlplus_Dbi - Fatal编程技术网

使用Perl DBI执行整个SQL文件,就像在Oracle SQL Developer中一样

使用Perl DBI执行整个SQL文件,就像在Oracle SQL Developer中一样,perl,oracle,sqlplus,dbi,Perl,Oracle,Sqlplus,Dbi,我需要使用Perl DBI对Oracle数据库执行一个SQL文件。通过快速搜索,我找到了一些逐行执行SQL文件的解决方案,但我希望像在SQLDeveloper中一样加载整个SQL文件 在SQL Dveloper或SQL*Plus命令行中,我可以执行 @/path/to/file.sql; 如果我用Perl执行以下语句 my $query = "@/path/to/file.sql"; my $sth = $dbh->prepare($query) or die "Cou

我需要使用Perl DBI对Oracle数据库执行一个SQL文件。通过快速搜索,我找到了一些逐行执行SQL文件的解决方案,但我希望像在SQLDeveloper中一样加载整个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

sqlplus,在处理文件时,在读取分号“;”时执行SQL语句在一行的末尾,或一行上的正斜杠“/”。如果你想用perl和DBI来处理它,你必须以同样的方式分割语句,一次执行一个,去掉“/”和“;”在你执行之前。请记住,“执行一些存储过程”是一个sqlplus语句,而不是SQL语句,在DBI see DBD::Oracle中执行之前,您必须对其进行扩展


此外,如果您这样做,您不需要准备和执行,只需要这样做。

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

可能吗?我试着做到以下几点:

use DBI;
my $dbh = DBI-> connect('dbi:ODBC:test','test','test');
my $sql="@\test.sql";
$dbh->do($sql);
我的当前目录中有test.sql和一条简单的sql语句


我需要一个新的odbc测试驱动程序,并将其安装到一些测试框架中。Thx.

使用DBI一次不能执行多个SQL语句。你为什么不想一行一行地做呢?如果SQL*Plus能满足您的需要,为什么不使用它呢?您知道SQL Developer和SQL*Plus一次只执行一条语句吗?无论使用什么工具,都无法一次完成一个完整的脚本use@Borodin:问题可能是指是否可以使用DBI将文件大容量加载到数据库中。您可以拥有一个允许逐个处理每一行的数据库。我不确定是否有帮助。它有一个“load”命令来读取一个文件的内容,准备执行它,但我不知道它是否将该文件的内容拆分为单独执行的可执行语句。这里应该提供一个明确的答案,而不是一个新问题。