PerlからMySQLストアドプロシージャを呼び出すにはどうすればよいですか?ストアドプロシージャの機能はMySQLにとってかなり新しく、Perl用のMySQLモジュールはまだ追いついていないようです。PerlからMySQLストアドプロシージャを呼び出すにはどうすればよいですか?
6
A
答えて
2
まず、DBIライブラリを介して接続する必要があります。次に、バインド変数を使用する必要があります。例えば。何かのように:私はこれをテストしていません
#!/usr/bin/perl
#
use strict;
use DBI qw(:sql_types);
my $dbh = DBI->connect(
$ConnStr,
$User,
$Password,
{RaiseError => 1, AutoCommit => 0}
) || die "Database connection not made: $DBI::errstr";
my $sql = qq {CALL someProcedure(1);} }
my $sth = $dbh->prepare($sql);
eval {
$sth->bind_param(1, $argument, SQL_VARCHAR);
};
if ([email protected]) {
warn "Database error: $DBI::errstr\n";
$dbh->rollback(); #just die if rollback is failing
}
$dbh->commit();
マインドあなたは、あなたがCPAN上の正確な構文をルックアップする必要があります。
5
7
データセットを生成するMySQLストアドプロシージャでは、Perl DBD :: mysql 4.001以降を使用する必要があります。以下は、(http://www.perlmonks.org/?node_id=609098)
は、新しいバージョンで動作するテストプログラムです:
mysql> delimiter //
mysql> create procedure Foo(x int)
-> begin
-> select x*2;
-> end
-> //
perl -e 'use DBI; DBI->connect("dbi:mysql:database=bonk", "root", "")->prepare("call Foo(?)")->execute(21)'
しかし、あなたはDBDのあまりに古いバージョン:: mysqlのを持っている場合、あなたはこのような結果を得る:
をDBD::mysql::st execute failed: PROCEDURE bonk.Foo can't return a result set in the given context at -e line 1.
最新のDBDをインストールするには、CPANを使用します。
2
#!/usr/bin/perl
# Stored Proc - Multiple Values In, Multiple Out
use strict;
use Data::Dumper;
use DBI;
my $dbh = DBI->connect('DBI:mysql:RTPC;host=db.server.com',
'user','password',{ RaiseError => 1 }) || die "$!\n";
my $sth = $dbh->prepare('CALL storedProcedure(?,?,?,?,@a,@b);');
$sth->bind_param(1, 2);
$sth->bind_param(2, 1003);
$sth->bind_param(3, 5000);
$sth->bind_param(4, 100);
$sth->execute();
my $response = $sth->fetchrow_hashref();
print Dumper $response . "\n";
私はそれを理解するのに時間がかかりましたが、私は上記で必要なものを得ることができました。複数のリターン "ライン"を取得する必要がある場合は、私はあなただけを推測しています...
while(my $response = $sth->fetchrow_hashref()) {
print Dumper $response . "\n";
}
私はそれが役に立ちます。
1
こんにちは、上記と似ていますが、SQL execを使用しています。私はCALLコマンドを動作させることができませんでした。角括弧の中にあるものを記入し、角括弧を削除する必要があります。
use DBI; #START: SET UP DATABASE AND CONNECT my $host = '*[server]*\\*[database]*'; my $database = '*[table]*'; my $user = '*[user]*'; my $auth = '*[password]*'; my $dsn = "dbi:ODBC:Driver={SQL Server};Server=$host;Database=$database"; my $dbh = DBI->connect($dsn, $user, $auth, { RaiseError => 1 }); #END : SET UP DATABASE AND CONNECT $sql = "exec *[stored procedure name]* *[param1]*,*[param2]*,*[param3]*;"; $sth = $dbh->prepare($sql); $sth->execute or die "SQL Error: $DBI::errstr\n";
関連する問題
- 1. perlからストアドプロシージャを呼び出す
- 2. SQL Serverの別のストアドプロシージャからストアドプロシージャを呼び出すにはどうすればよいですか?
- 3. PHPからMySQLストアドプロシージャを呼び出す
- 4. JavaストアドプロシージャからJavaレストサービスを呼び出すにはどうすればよいですか?
- 5. ExcelのVBAスクリプトからOracleストアドプロシージャを呼び出すにはどうすればよいですか?
- 6. Crystal Reportsからストアドプロシージャを呼び出すにはどうすればよいですか?
- 7. jsからストアドプロシージャを呼び出すにはどうすればよいですか?
- 8. シェルスクリプトからPerl関数を呼び出すにはどうすればよいですか?
- 9. DCLスクリプトからPerl関数を呼び出すにはどうすればよいですか?
- 10. mysqlの別のストアドプロシージャからストアドプロシージャを呼び出す方法は?
- 11. MySQLのストアドプロシージャでストアドプロシージャを呼び出す
- 12. Perlでコピーコンストラクタを呼び出すにはどうしたらいいですか?
- 13. PHPからMySQLの対話型クライアントを呼び出すにはどうすればよいですか?
- 14. SSISでどのようにストアドプロシージャを呼び出しますか?
- 15. ディレクトリ内の各ファイルでストアドプロシージャをパラメータとして呼び出すにはどうすればよいですか?
- 16. Groovyを使用してストアドプロシージャを呼び出すにはどうすればよいですか?
- 17. 非定型パラメータを使用してストアドプロシージャを呼び出すにはどうすればよいですか?
- 18. Perl 6のクラスのサブルーチンで.WHYを呼び出すにはどうすればよいですか?
- 19. C#アプリケーションでPerlスクリプトを呼び出すにはどうすればよいですか?
- 20. どのようにワードプレスのストアドプロシージャを呼び出しますか?
- 21. アクティビティでカスタムクラスを呼び出すにはどうすればよいですか?
- 22. レールコントローラでチャンネルメソッドを呼び出すにはどうすればよいですか?
- 23. サービスクラスでsupportFragmentMangerを呼び出すにはどうすればよいですか?
- 24. インスタンスでクラスメソッドを呼び出すにはどうすればよいですか?
- 25. MVCでコントローラアクションを呼び出すにはどうすればよいですか?
- 26. ベースクラスオブジェクトでサブクラスメソッドを呼び出すにはどうすればよいですか?
- 27. application_controllerでメソッドを呼び出すにはどうすればよいですか?
- 28. render()で.selectedIndexを呼び出すにはどうすればよいですか?
- 29. SwiftでNSLocalizedStringWithDefaultValueを呼び出すにはどうすればよいですか?
- 30. MVC4でカスタムモデルバインダーを呼び出すにはどうすればよいですか?
あなたはeval {}の後にセミコロンを忘れました。よくあるバグです。 –