It is concidered rather poor form it create you sql on the fly so while

my $sql='Select $field1, $field2  from test_table where $field1=$var1 and 
$field2=$var2

is ok

you are opening yourself to a host of problems such as

1) "hacking" with SQL insertion
2) problems with using ' and " if you field are strings
3) and a number of other reaseons Style,maintainablity scaleabilit

buch better to do this
my $sql='Select name,year  from test_table where name=:name and year=:year

$c = $db->prepare($sql);
$c->bind_param(":name",$var1 );
$c->bind_param(":year",$var2 );
$c->execute();

abd let DBI do the formating of ' for you

cheers

""Ravi Malghan"" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
> Hi: could you please provide more detail on what you mean by bind 
> variable?
> Thanks
> Ravi
> ""Andy Hassall"" <[EMAIL PROTECTED]> wrote in message 
> news:[EMAIL PROTECTED]
>> Use two statements. You can't combine them into one like that.
>> (without amounts of pain far exceeding that of just executing two 
>> separate
>> statements)
>>
>> Shouldn't you be using a bind variable instead of interpolating $period 
>> into
>> the SQL as well?
>>
>> -- 
>> Andy Hassall :: [EMAIL PROTECTED] :: http://www.andyh.co.uk
>> http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
>>
>> -----Original Message-----
>> From: Ravi Malghan [mailto:[EMAIL PROTECTED]
>> Sent: 27 November 2006 22:55
>> To: dbi-users@perl.org
>> Subject: DBD Oracle: multiple statements in a single execute?
>>
>> Hi: my dba has asked to execute a alter statement before the select
>> statement. So I need to run the following
>>
>> alter session set db_file_multiblock_read_count = 128;
>> SELECT ED.utime, ED.info, ED.agent_id FROM EVENT_DATA ED WHERE ED.utime
>> between $period order by ED.utime;
>>
>> where $period is a string such as "190 and 300".
>>
>> I tried the following
>>   my $sql = qq{
>>         BEGIN
>>            alter session set db_file_multiblock_read_count = 128;
>>            SELECT ED.utime, ED.info, ED.agent_id FROM EVENT_DATA ED WHERE
>> ED.utime between $period order by ED.utime;
>>         END; };
>>   print "Running\n$sql\n";
>>   my $sth = $dbh->prepare($sql);
>>   $sth->execute();
>>
>>
>> I get the following error
>> ====================
>> DBD::Oracle::st execute failed: ORA-06550: line 3, column 5:
>> PLS-00103: Encountered the symbol "ALTER" when expecting one of the
>> following:
>>
>>   begin case declare exit for goto if loop mod null pragma
>>   raise return select update while with <an identifier>
>>   <a double-quoted delimited-identifier> <a bind variable> <<
>>   close current delete fetch lock insert open rollback
>>   savepoint set sql execute commit forall merge
>>   <a single-quoted SQL string> pipe
>> The symbol "update was inserted before "ALTER" to continue. (DBD ERROR:
>> error possibly near <*> indicator at char 14 in '
>>                        BEGIN
>>                                <*>alter session set
>> db_file_multiblock_read_count = 128;
>>                                SELECT ED.utime, ED.info, ED.agent_id FROM
>> EVENT_DATA ED WHERE ED.utime between 1164650400 and 1164653940 order by
>> ED.utime;
>>                        END; ') [for Statement "
>>                        BEGIN
>>                                alter session set
>> db_file_multiblock_read_count = 128;
>>                                SELECT ED.utime, ED.info, ED.agent_id FROM
>> EVENT_DATA ED WHERE ED.utime between 1164650400 and 1164653940 order by
>> ED.utime;
>>                        END; "] at
>> /actuate/AcServer/reports_scripts/report_functions.pl line 48.
>> =========================
>>
>> Could someone help.
>>
>> Thanks
>> Ravi
>>
>
> 


Reply via email to