RE: DBD Oracle: multiple statements in a single execute?
- From: andy@xxxxxxxxxxx (Andy Hassall)
- Date: Mon, 27 Nov 2006 23:55:32 -0000
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 :: andy@xxxxxxxxxxx :: http://www.andyh.co.uk
http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
-----Original Message-----
From: Ravi Malghan [mailto:rmalghan@xxxxxxxxx]
Sent: 27 November 2006 22:55
To: dbi-users@xxxxxxxx
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
.
- References:
- DBD Oracle: multiple statements in a single execute?
- From: Ravi Malghan
- DBD Oracle: multiple statements in a single execute?
- Prev by Date: DBD Oracle: multiple statements in a single execute?
- Next by Date: RE: DBD Oracle: multiple statements in a single execute?
- Previous by thread: DBD Oracle: multiple statements in a single execute?
- Next by thread: RE: DBD Oracle: multiple statements in a single execute?
- Index(es):
Relevant Pages
|