2011-12-20 26 views
2

Sybase DBサーバ(MYDATABASESERVERサーバのエイリアス)に接続するperlスクリプトがあります。私のコードは次のとおりです。私はMYDATABASESERVER(DSQUERYの値)としてサーバー名を提供する場合Sybase DBに接続中にエラーが発生しました

exec perl -w -x 
#!perl 

use Sybase::DBlib; 
use Mail::Sendmail; 
use Env qw(DSQUERY DBNAME DBUSER DBPASSWD); 

$dbh = &execRemoteSQL($sql_text); 

sub execRemoteSQL 
{ 
my ($sqlText) = @_; 
my ($ret, $retS); 
local ($dbh) = undef; 


$dbh = new Sybase::DBlib $DBUSER, $DBPASSWD, $DSQUERY; 
if (!(defined $dbh)) 
{ 
    print STDERR "execRemoteSQL(): Failed To Create DB Handle for :\n"; 
      print STDERR " SERVER = $DSQUERY\n"; 
      print STDERR " DATABSE = $DBNAME\n"; 
    exit(-1); 
} 
. 
. 
. 

、私は、If文でエラーが出るが、それはMYDBとして名前のサーバに適切に接続されています。

サーバー名の長さに制約があるかどうかを知りたい場合、またはそれ以外の理由がある場合

DB-Library error: 
     Unknown host machine name. 
execRemoteSQL(): Failed To Create DB Handle for : 
SERVER = MYDATABASESERVER 
DATABSE = my_db 

を私はisqlを使用してDBに接続することですので、サーバーの別名が正しく定義されています。ここでは

は私が取得していますエラーmesssageです。

+3

実際のエラーメッセージは何ですか? – Bryan

+0

[厳格と警告を使う理由は?](http://stackoverflow.com/questions/8023959/why-use-strict-and-warnings) – TLP

+0

Sybase :: DBlibにデバッグが組み込まれていることに気づくことはできません:http://search.cpan.org/~mewp/sybperl-2.19/DBlib/DBlib.pm#Utility_routinesそれを使用していない理由はありますか? – TLP

答えて

0

代わりに次の構文を試すことができますか? :

$dbh = Sybase::DBlib->new($DBUSER, $DBPASSWD, $DSQUERY); 
+0

はあなたが言及した構文を使用しましたが、引き続き同じエラーが発生しました。 – May

1

私はここではサーバー名の長さが長すぎるとは思わない。

正確なエラーメッセージは何ですか?

MYDATABASESERVERサーバーエイリアス名が、Sybase固有の「interfaces」構成ファイルで正しく定義されていない可能性があります。 dir $ SYBASE/$ SYBASE_OCSにあります。 MYDATABASESERVERについて何と言いますか(2行にする必要があります)?

いずれの場合も: DBLibを使用しないでください。実際には古く、廃止予定です。私は、Sybperl/DBLibとDBD :: Sybaseモジュールのメンテナーは、古いプログラムに対処しなければならないクライアントプログラマにとって、Sybase :: DBLibコードをサポートしていて、レガシーアプリケーションを新しいリリースと互換性を保つために、 Sybase ASE

代わりにDBIとDBD :: Sybaseを使用してください。インターネット上のすべてのperl/sybaseコードの99%がDBIを使用しています。

+0

元の投稿にエラーメッセージを追加しました。 – May

+0

DBD :: Sybaseを使用するようにコードを変更しました。現在は正常に動作しています。 @knb:ありがとう。 – May

関連する問題