Использование оператора OR в Oracle SQL - PullRequest
0 голосов
/ 06 октября 2011

У меня проблема с оператором OR в моем SQL SELECT в perl.

    ######################### 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]$ 

Итак, что я хочу, чтобы это было в состоянии сделать:

У меня есть текстовая область, в которой пользователь вводит полное доменное имя или IP-адрес строка за строкой устройства и входит в базу данных Oracle и получает определенную информацию.

Оператор SELECT пытается получить эту информацию в зависимости от того, что вводит пользователь (IP или FQDN).

Спасибо

Ответы [ 2 ]

1 голос
/ 06 октября 2011

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

Ну, вот и все: вам нужно связать две переменные с оператором выбора (т.е. части в $SEL, где есть знаки вопроса) вместо одной.

0 голосов
/ 06 октября 2011

У вас проблемы с привязкой переменных к запросу?

$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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...