0

ここで問題が発生しています。変数を sqlplus クエリに渡そうとしていますが、機能していないようです。

    my $connect = DBI->connect('DBI:Oracle:',$dbuser,$dbpasswd);
  my $query = "select sum(transaction_amnt) from comm_to_cand natural join cmte_id_to_geo where cycle='?'", $cycle;
  my $query_handle = $connect->prepare($query);
  $query_handle->execute();
  $cmte_money = $query_handle->fetchrow_array();

  print 'Money: ';
  print $cmte_money;

  if($cmte_money > 0)
  {
    print 'HI';
  }
  else
  {
    print 'NOOOO';
  }

「cycles」変数を変数から定数に変更するとクエリが機能し、if ステートメントのチェックで hi が出力されるので、データベースは確実に機能します。

私はインターネットを精査しましたが、答えが見つからないようです。

4

4 に答える 4

5

まず、プレースホルダーを使用するつもりですが、使用していません。

where cycle='?'     -- This is a string

する必要があります

where cycle=?       -- This is a placeholder

そして、実際にプレースホルダーの値を渡さないという問題があります。

$query_handle->execute();

する必要があります

$query_handle->execute($cycle);
于 2012-10-22T01:51:23.257 に答える
1

プレースホルダーの置換は実行に渡されるため、次のようになります。

my $query = "select sum(transaction_amnt) from comm_to_cand natural join cmte_id_to_geo where cycle=?";
my $query_handle = $connect->prepare($query);
$query_handle->execute($cycle);

あなたが持っていたコードは、警告を有効にしていれば警告を発していたでしょう。あなたがそうしていることを確認し、あなたが受け取ったものにどのように対応するかを理解してください.

于 2012-10-22T01:43:43.713 に答える
0
  my $connect = DBI->connect('DBI:Oracle:',$dbuser,$dbpasswd);
  # Tell the DBI that the query uses bind variable with ? (question mark)
  my $query = "select sum(transaction_amnt) from comm_to_cand natural join cmte_id_to_geo where cycle=?";
  my $query_handle = $connect->prepare($query);
  # Pass the value 
  $query_handle->execute($cycle); # assuming the variable is defined (otherwise it will pass as NULL into the query)
  $cmte_money = $query_handle->fetchrow_array();

  print 'Money: ';
  print $cmte_money;

  if($cmte_money > 0)
  {
    print 'HI';
  }
  else
  {
    print 'NOOOO';
  }
于 2016-10-29T00:33:07.157 に答える
0

次に例を示します。

use strict;

    use DBI;

    my $connect = DBI->connect('DBI:Oracle:', $dbuser, $dbpasswd); 
    my $query = "select sum(transaction_amnt) from comm_to_cand natural join cmte_id_to_geo where cycle = `$cycle`"; 
    my $query_handle = $connect->prepare($query); 
    $query_handle->execute(); 
    @cmte_money = $query_handle->fetchrow_array(); 

    print 'Money: '; 
    print @cmte_money; 

    if($#cmte_money >= 0) 
    { 
      print 'HI'; 
    } 
    else 
    { 
      print 'NOOOO'; 
    } 

私は定数変数を定義します$cycle、私はこのように考えます。

于 2012-10-22T06:39:48.487 に答える