我一直在使用DBI模塊連接到我的數據庫時遇到了一些麻煩。我有一個屬性文件,並在其中指定我是否想通過簡單的database=oracle
或database=postgres
連接到我的oracle或postgres DB。我的屬性文件設置使用配置::微型模塊,和我的變量被設置爲這樣:有條件地連接到數據庫
my $database = $config->{myDB}->{database};
...
我不明白的是,即使這個工作對我的所有的變量,如果我嘗試的東西這樣的連接被指定到哪個數據庫的屬性文件...
if($database eq "oracle"){
my $dbh = DBI->connect("dbi:Oracle:host=abc123-server;sid=XE;port=1521","User","Pass");
}
elsif($database eq "postgres"){
my $dbh = DBI->connect("dbi:Pg:dbname=pepperoni;host=789xyz-server;port=5444;","Foo","Bar");
}else{
print "Could not connect to a database";
}
...我結束了這些錯誤:
Global symbol "$dbh" requires explicit package name at supportvuloop.pl line 70.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 80.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 81.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 82.
Global symbol "$dbh" requires explicit package name at reportloop.pl line 88.
我可以連接到數據庫就好了,當他們不是一部分如果條件,任何想法,爲什麼它會導致錯誤呢?
爲什麼不乾脆把整個「甲骨文:主機= ABC123服務器; SID = XE;端口= 1521」在您的配置文件中的字符串?這樣,您可以在不更改代碼的情況下使用任何數據庫。爲了便於切換,請將Oracle和Postgres行都放在配置文件中,並註釋掉不使用的行。 – cjm 2012-07-16 17:58:33
@cjm - 對於這個問題,有一個oracle或sybase文件,並通過讀取不同的配置文件名切換 – DVK 2012-07-16 18:35:04