2016-04-18 7 views
0

私はストアドプロシージャを実行しようとしていますが、(現在は)返された行の数を取得しようとしています。 しかし、私は次のようなエラーになっておく:ここPerl - Oracle DBのストアドプロシージャを呼び出す方法

DBD::Oracle::st execute failed: ORA-00900: invalid SQL statement (DBD ERROR: OCI 
StmtExecute) [for Statement "exec VSU22.DB_API.GetUsersInfo(?);" with ParamValue 
s: :p1=1] at C:\NNInstall\auit.pl line 19. 

はスクリプトです:私は間違っ

#!/usr/bin/perl 
use strict; 
use dbi; 

my ($connection_string, $nn_dbh, $extract_sth); 
my $dbIPAddress = "192.168.147.55"; 
my @row; 
my $query_result=0; 
my $var; 
$connection_string = "dbi:Oracle:host=$dbIPAddress;sid=NNVSDB"; 
$nn_dbh->{RaiseError} = 1; 
$nn_dbh->{RowCacheSize} = 256; 
$nn_dbh = DBI->connect($connection_string, 'DBSUER', 'DBUSER') 
    or die "Connection failed: $DBI::errstr"; 

$extract_sth = $nn_dbh->prepare('exec DBUSER.API.UsersInfo(?);'); 
$extract_sth ->bind_param(1, 1); 
my $num_ofOrows= $extract_sth->execute(); 

何をしているのだろうか?

+1

1.ストアドプロシージャが正しく実行されていることをご存知ですか? Oracleでテストしましたか?もしそうなら、期待される形式でparamが渡されているかどうか知っていますか? SQL文がストアドプロシージャ内で正しく構築されていることを確認するために、コンソールまたはテンポラリテーブルに作成されたSQL文を出力するprocを得ることができますか? 3.保存されたprocコードも投稿すると便利です。 –

+0

1.はい。 2.予想されるパラメータタイプはNUMBERです。 3.プロシージャコードを転記できません。 –

+0

私はその文が失敗するかどうかを見るためにspで作成されたSQLを出力する方法を見つけるでしょう。もしそうでなければ、失敗している呼び出しがありますが、少なくともあなたはどこを見るべきかを知っています。 –

答えて

1

EXEC[CUTE]は、SQL*Plus commandです。通常、他のSQLクライアントでは実装されていません。おそらく、無名のPL/SQLブロックを使用する必要があります。

BEGIN 
    DBUSER.API.UsersInfo(?); 
END; 
+0

'CALL DBUSER.API.USERSINFO(?);'の場合も同じことをしてください。 ? –

+0

私は 'CALL'も有効なオプションだと信じています - http://ss64.com/ora/call.html –

+0

しかし、私はどうしていますか? BEGIN&ENDを追加しましたが、同じエラーが発生します。 –

関連する問題