2011-10-05 78 views
-2

我在我的SQL SELECT語句中遇到了OR語句問題。在Oracle SQL中使用OR語句

######################### Open File and Split The Data Into An Array #################################### 
$input_data_file = '/var/www/html/JG/TG/tower_gather.txt'; 
open (DAT, $input_data_file) 
      or die ("Could not open file!"); 

@raw_data = <DAT>; 

close(DAT); 
######################################################################################################### 

$dbh_source2 = DBI->connect("dbi:Oracle:host=<ip-address>;port=<port-number>;sid=<sid>",'username','password'); 
$SEL = "SELECT DISTINCT SITE_NAME, SITEID, PE_DOWNLINK_PORT FROM CBHME.SERVICE_TOPOLOGY_VIEW WHERE LOWER(PE_FQDN) = ? OR PE_OSPF_LOOPBACK_IP = ?"; 


$fqdn = $q->param('PE_FQDN'); 

$sth = $dbh_source2->prepare($SEL); 
print '<table border=1>'; 
print '<tr>'; 
print '<th>SUR FQDN</th>'; 
print '<th>Tower Name</th>'; 
print '<th>Site ID</th>'; 
print '<th>SUR Link</th>'; 

print '</tr>'; 
foreach my $data_line (@raw_data) { 
     chomp $data_line; 

     $sth->execute($data_line); 

     while (my @row = $sth->fetchrow_array) { 
       #Print data into cells# 
       print "<tr>"; 
       print "<td>$data_line</td>"; 
       foreach (@row) { 
       print "<td>$_</td>"; 
       } 
       print "</tr>"; 
       #print "<$data_line>\t @row\n"; 

     } 

} 

print "</table>"; 
END {  
      $dbh_source2->disconnect if defined($dbh_source2); 
} 

The error: 
[[email protected] cgi-bin]$ ./tower_gather_script.cgi 
DBD::Oracle::st execute failed: called with 1 bind variables when 2 are needed [for Statement "SELECT DISTINCT SITE_NAME, SITEID, PE_DOWNLINK_PORT FROM CBHME.SERVICE_TOPOLOGY_VIEW WHERE LOWER(PE_FQDN) = ? OR PE_OSPF_LOOPBACK_IP = ?" with ParamValues: :p1=undef, :p2=undef] at ./tower_gather_script.cgi line 33. 
DBD::Oracle::st fetchrow_array failed: ERROR no statement executing (perhaps you need to call execute first) [for Statement "SELECT DISTINCT SITE_NAME, SITEID, PE_DOWNLINK_PORT FROM CBHME.SERVICE_TOPOLOGY_VIEW WHERE LOWER(PE_FQDN) = ? OR PE_OSPF_LOOPBACK_IP = ?" with ParamValues: :p1=undef, :p2=undef] at ./tower_gather_script.cgi line 35. 
<table border=1><tr><th>SUR FQDN</th><th>Tower Name</th><th>Site ID</th><th>SUR Link</th></tr></table>[[email protected] cgi-bin]$ 

所以,我希望它能夠做到:

我在其中一個用戶通過的線進入FQDN或IP地址行的文本區域設備並進入Oracle數據庫並獲取某些信息。

SELECT語句試圖根據用戶輸入的內容(IP或FQDN)獲取該信息。

謝謝

+2

你是什麼意思的「不工作」? (這是一個Oracle SQL問題,而不是perl問題)。 – geoffspear

+0

Perl「或」語句在哪裏?我認爲你指的是SQL語句中的「OR」運算符。 「OR語句在這種情況下不起作用」是什麼意思?你能舉一個你期望輸出什麼樣的例子嗎?另外,還要說明如何設置查詢的參數以及如何執行查詢。 –

+0

基本上它沒有在SQL SELECT中使用OR語句: 它沒有輸出。我正在根據用戶輸入查詢FQDN或IP地址的數據庫 – jmg0880

回答

1

DBD::Oracle::st execute failed: called with 1 bind variables when 2 are needed...

好吧,你去:你需要兩個變量綁定到select語句(即$SEL那裏有問號的部分),而不是隻有一個。

+0

對不起,如果我不熟悉如何綁定第二個變量。你介意告訴我該怎麼做? – jmg0880

+0

在你的'execute'命令中,你需要有多個變量作爲參數。退房http://search.cpan.org/~timb/DBI/DBI.pm#execute – 2011-10-05 21:17:45

+0

好的非常感謝你的幫助信息。我仍然是perl/SQL的新手。 我對之前的任何無知表示歉意。 – jmg0880

0

你是否在綁定變量時遇到查詢問題?

$query = "SELECT something FROM table WHERE firstname = ? AND lastname = ?"; 

$bindh = $dbh->prepare($query) 
    or die "Unable to prepare $query" . $dbh->errstr; 

foreach $line (@Array) 
{ 
    ($f1, $f2) = split(/\|/, "$line"); 

    $bindh->execute($f1, $f2) 
    or die "Unable to execute '$query'. " . $bindh->errstr; 

    @results = $bindh->fetchrow_array; 
}