>>>>$retval = `/$ENV{'ORACLE_HOME'}/bin/sqlplus -s $QUERY_STRING << EOF >>
One question out of curiosity. Actually 2 questions:
1. I am not sure if -s is a valid sqlplus option. I have always used -S to
operate in silent mode. I am using SQL*Plus: Release 10.2.0.4.0 - Production
2. Is there any specific need why you are supplying sql steps through EOF.
Its always advisable to try to invoke the queries/commands through proper
.sql file.
Cheers,
Parag
On Wed, Sep 22, 2010 at 11:04 AM, Gopal Karunakar <[email protected]
> wrote:
> Hi,
>
> Here's the code pasted below. The sub basically executed an anonymous
> pl/sql block (which is executing fine). I want to make sure that the user
> will not be able to a ctrl-c and exit at the stage where the sql statements
> are getting executed.
>
> I tried declaring it as local but even then its hanging when i give the
> interrupt.
>
>
> sub CopyData
> {
> local $SIG{'INT'} = 'IGNORE';
>
> ($option, $sourceID, $targetID, ) = ($_[0], $_[1], $_[2]);
>
> $option =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
> $sourceID =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
> $targetID =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/;
>
> my $retval;
>
> $retval = `/$ENV{'ORACLE_HOME'}/bin/sqlplus -s $QUERY_STRING << EOF >>
> $db_log
> WHENEVER OSERROR EXIT 5 ROLLBACK;
> WHENEVER SQLERROR EXIT 10 ROLLBACK;
> SET SERVEROUTPUT ON SIZE 1000000;
> SET FEEDBACK OFF;
> set pagesize 0;
> set linesize 150;
>
> DECLARE
>
> ........................
>
> ............
>
> COMMIT;
>
> EXCEPTION
>
> WHEN OTHERS
> THEN
>
>
> o_ret_message := 'Exception occured -' || ' Module Name:' || g_msg
> || CHR(10) ||
> 'Error Code: ' || SQLCODE || CHR(10) ||
> 'Error Message: ' || SUBSTR(sqlerrm,1,2000) ;
> DBMS_OUTPUT.PUT_LINE (o_ret_message);
> DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
>
>
> ROLLBACK;
>
> END;
> /
>
> EOF` ;
>
> return $retval;
> }
>
>
> Regards,
>
> GK.
>
>
> On 22 September 2010 22:57, C.DeRykus <[email protected]> wrote:
>
> > On Sep 22, 6:53 am, [email protected] (Gopal Karunakar) wrote:
> >
> > > I used the $SIG{'INT'} = 'IGNORE'; in a sub in my script so
> that
> > the
> > > script while executing the particular sub will ignore the ctrl-c. And I
> > gave
> > > $SIG{'INT'} = 'DEFAULT'; at the end of the sub to reset the behavior
> back
> > to
> > > normal.
> >
> > Presuming your signal setting is the default on entry to
> > the sub, you can just use local to temporarily set the
> > interrupt:
> >
> > sub foo { local $SIG{INT} = 'IGNORE'; ... }
> >
> > The interrupt signal will be ignored for the scope of
> > the sub. When the sub ends, the interrupt setting
> > returns to its prior value.
> >
> > > But when i give the ctrl-c the process seems to be hanging and I
> > > have to kill the process from the prompt. Is there any way to avoid
> > getting
> > > this behavior?? When i give the ctrl-C the script should just ignore it
> > and
> > > continue the process. I am on Sun Solaris box and using Perl version
> > 5.8.7.
> > >
> >
> > Are you sure there's only one exit point from the sub... ?
> > That's a possible scenario which could bypass your
> > $SIG{'INT'} = 'DEFAULT' reset at the end of the sub.
> > (BTW, that's another advantage to using 'local')
> >
> > Show of the code too. You can just pull out some of
> > the relevant lines to give everyone a better view of the
> > crime scene. It's much easier to spot what might be
> > happening.
> >
> > --
> > Charles DeRykus
> >
> >
> > --
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> > http://learn.perl.org/
> >
> >
> >
>