我在perl中的SQL SELECT中遇到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:
[jgearh200@srv01-netops 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>[jgearh200@srv01-netops cgi-bin]$
所以我希望它能够做到:
我有一个文本区域,用户在其中逐行输入FQDN或IP地址,然后进入Oracle数据库并获取某些信息。
SELECT语句试图根据用户输入的内容(IP或FQDN)获取该信息。
谢谢
答案 0 :(得分:1)
DBD::Oracle::st execute failed: called with 1 bind variables when 2 are needed...
嗯,你去了:你需要将两个变量绑定到select语句(即$SEL
中有问号的部分),而不只是一个。
答案 1 :(得分: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;
}