1

Perl DBI を使用して、Oracle データベースに対して SQL ファイルを実行する必要があります。クイック検索で、SQL ファイルを 1 行ずつ実行するソリューションをいくつか見つけましたが、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で処理する場合は、同じ方法でステートメントを分割し、「/」と「;」を削除して、一度に1つずつ実行する必要があります。実行する前に。また、「execute some_stored_procedure()」はSQLステートメントではなくsqlplusステートメントであり、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);

現在のディレクトリに単純な sql ステートメントを含む test.sql があります。

これは、新しい odbc テスト ドライバーに必要であり、いくつかのテスト フレームワークに適合させます。どうも。

于 2014-08-16T00:15:17.410 に答える