我有一段代碼,我想獲取資料庫資訊并存盤所需的資料,我已經連接到資料庫我正在尋找的是獲取資料庫中存在的表的名稱,以便我可以訪問它們一個一個地獲取所需的資訊。
這是我的代碼
#!/usr/bin/perl
use DBI;
use strict;
use warnings;
use Switch;
use Data::Dumper;
use Spreadsheet::Read qw(ReadData);
my @expValues ="";
my $portDes="";
my $portValue="";
my $ttidDes;
my $ttidValue;
my $tidvDes;
my $tidvValue;
my $tiDes;
my $tiValue;
my $redirectHostDes;
my $redirectHostValue;
my $saQueryDes;
my $saQueryValue;
my $dialedNumDes;
my $dialedNumValue;
my $dbType = "mysql";
my $database = "control";
my $host="localhost";
my $dsn="";
my $userid="";
my $password="";
if($dbType eq "mysql"){
$dsn = "DBI:$dbType:database=$database;host=$host:port=XXXX";
$userid = "XXXX";
$password = 'XXXX';
}else{
$dbType="postgres";
$userid = "postgres";
$password = "postgres";
$dsn = "DBI:$dbType:database=$database;host=$host,port=XXXX";
}
my $dbcon = DBI->connect($dsn, $userid, $password) or die "Can't connect to database: $DBI::errstr\n";
print "connected to the database\n";
my $notables = $dbcon->tables();
print "No of tables : $notables" ;
sub getXlxsDetails(){
my $book = ReadData ($_[0]);
my $configrows = $_[1];
#print $configrows;
my @rows;
#my @port;
#my @ttid;
#my @ti;
#my @tidv;
#my @redirect;
#my @saQuery;
#my @dialed;
#my @returnInfo;
if($configrows eq ""){
$portValue="Null";
$ttidValue="Null";
$tidvValue="Null";
$tiValue="Null";
$redirectHostValue="Null";
$saQueryValue="Null";
$dialedNumValue="Null";
print ("NOT NULL**************************");
return $portValue,$ttidValue,$tidvValue,$tiValue,$redirectHostValue,$saQueryValue,$dialedNumValue;
}
else{
if($configrows eq 'Development'){
@rows = Spreadsheet::Read::rows($book->[1]);
}
if($configrows eq 'Production'){
@rows = Spreadsheet::Read::rows($book->[2]);
}
foreach my $i (1 .. scalar @rows) {
foreach my $j (1 .. scalar @{$rows[$i-1]}) {
my $key = $rows[$i-1][$j-1] // '';
switch($key){
case "Port Assigned " {
print ("MATCHED************************** Port Assigned\n");
$portDes = (($rows[$i-1][$j-1])."\n");
$portValue = (($rows[$i-1][($j 1)-1])."\n");
#@returnInfo[$j] = ($portValue);
}
case "TTID (Y/N, default: Y)" {
print ("MATCHED************************** TTID (Y/N, default: Y)\n");
$ttidDes= (($rows[$i-1][$j-1])."\n");
$ttidValue=(($rows[$i-1][($j 1)-1])."\n");
#@returnInfo[$j 1] = ($ttidValue);
}
case "TIDV (Y/N, default: Y)" {
print ("MATCHED************************** TIDV (Y/N, default: Y)\n");
$tidvDes=(($rows[$i-1][$j-1])."\n");
$tidvValue= (($rows[$i-1][($j 1)-1])."\n");
#@returnInfo[$j 2] = ($tidvValue);
}
case "TI (Y/N, default: Y)" {
print ("MATCHED************************** TI (Y/N, default: Y)\n");
$tiDes= (($rows[$i-1][$j-1])."\n");
$tiValue=(($rows[$i-1][($j 1)-1])."\n");
#@returnInfo[$j 3] = ($tiValue);
}
case "Redirect host FQDN (default)" {
print ("MATCHED************************** Redirect host FQDN (default)\n");
$redirectHostDes=(($rows[$i-1][$j-1])."\n");
$redirectHostValue=(($rows[$i-1][($j 1)-1])."\n");
#@returnInfo[$j 4] = ($redirectHostValue);
}
case "SA-Query URL" {
print ("MATCHED************************** SA-Query URL\n");
$saQueryDes=(($rows[$i-1][$j-1])."\n");
$saQueryValue=(($rows[$i-1][($j 1)-1])."\n");
#@returnInfo[$j 5] = ($saQueryValue);
}
case "Dialed Number (from SIP invite)" {
print ("MATCHED************************** Dialed Number (from SIP invite)\n");
$dialedNumDes= ($rows[$i-1][$j-1]);
$dialedNumValue=($rows[($i 1)-1][$j-1]);
#@returnInfo[$j 6] = ($dialedNumValue);
}
}
next;
}
}
return $portValue,$ttidValue,$tidvValue,$tiValue,$redirectHostValue,$saQueryValue,$dialedNumValue;
}
#@returnInfo = (\@port,\@ttid,\@ti,\@tidv,\@redirect,\@saQuery,\@dialed);
}
#my $Result=&getXlxsDetails(\@rowsDev,"Port Assigned ");
my ($result1,$result2,$result3,$result4,$result5,$result6,$result7)=&getXlxsDetails('024_Goldman_Sachs.xlsx','Development');
print($result1."\n".$result2."\n".$result3."\n".$result4."\n".$result5."\n".$result6."\n".$result7);
#print "@$result\n";
print "\n";
我得到的輸出是:
(tc-lab-04) /home/trustid/switchadaptor/testauto/dataverificationtesting2/XL_Parsing>./aa.pl
**connected to the database**
No of tables : 1MATCHED************************** Port Assigned
MATCHED************************** SA-Query URL
MATCHED************************** TTID (Y/N, default: Y)
MATCHED************************** TIDV (Y/N, default: Y)
MATCHED************************** TI (Y/N, default: Y)
MATCHED************************** Redirect host FQDN (default)
MATCHED************************** Dialed Number (from SIP invite)
10272
Y
Y
N
ivr.localdomain
https://devapi-primary.trustidinc.com/tid
8332259639
--> 它給我沒有。的表,而不是沒有。我想獲取資料庫中所有表的名稱。
我已經使用的代碼片段:
my @names = $dbcon->tables( $catalog, $schema, $table, $type );
print Dumper @names;
我正在使用虛擬機,基本上它是我的辦公室實驗室服務器,并且資料庫部署在此服務器中。
uj5u.com熱心網友回復:
在問題中嘗試使用$dbcon->tables()確實是一個好方法,但這會回傳表串列——雖然它被分配給一個標量,所以你可以得到表的數量,如觀察到的那樣。? 此外,不推薦使用不帶引數呼叫它(請參閱下面鏈接的檔案)。Dave Sherohman 的回答中顯示了正確的使用方法。
或者,使用table_info(表是一個“簡單的介面”),獲取和查看比名稱更詳細的資訊,并查看哪些表適合您的目的
my $sth = $dbh->table_info('', '', '%', 'TABLE');
my $res = $sth->fetchall_arrayref;
print Dumper $res;
或與
my $sth = $dbh->table_info('', '', '', 'TABLE');
甚至
my $sth = $dbh->table_info(undef, undef, undef, 'TABLE');
如果您省略最后一個'TABLE'(并使用''orundef代替),那么VIEWs 也將包含在結果中,這可能是您感興趣的。
? 該問題也顯示了正確的
my @names = $dbcon->tables( $catalog, $schema, $table, $type );
但它并沒有告訴我們它會發生什么以及所有這些變數是什么
uj5u.com熱心網友回復:
前面提到的評論和答案INFORMATION_SCHEMA應注意僅適用于 MySQL/MariaDB。不可否認,這是您的DBI->connect陳述句表明您正在使用的資料庫,但也有一種獨立于資料庫引擎的方法:
my @tables = $dbcon->tables(undef, undef, undef, 'TABLE');
uj5u.com熱心網友回復:
如何獲取未知資料庫中存在的表的名稱
您可以使用以下命令檢索服務器上存在的資料庫(包括系統資料庫)的名稱
SELECT SCHEMA_NAME AS `Database`
FROM INFORMATION_SCHEMA.SCHEMATA;
您可以使用以下命令檢索特定資料庫中的表名
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name';
或在當前資料庫中
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = DATABASE();
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483400.html
標籤:perl
