RE: SQLPLUS issue from ksh script

  • From: "Reidy, Ron" <Ron.Reidy@xxxxxxxxxxxxxxxxxx>
  • To: <david.barbour1@xxxxxxxxx>, "Oracle-L Freelists" <oracle-l@xxxxxxxxxxxxx>
  • Date: Fri, 26 May 2006 10:33:43 -0600

Escape the "$" in v$session => v\#session

 

--

Ron Reidy

Lead DBA

Array BioPharma, Inc.

 

________________________________

From: oracle-l-bounce@xxxxxxxxxxxxx
[mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of David Barbour
Sent: Friday, May 26, 2006 10:29 AM
To: Oracle-L Freelists
Subject: SQLPLUS issue from ksh script

 

I'm missing something easy here, so I'd really appreciate a fresh set of
eyes.  I've got a persistent jdbc connection to a primary database I
need to get rid of before I can switch to the standby.  The only way
I've been able to come with to get rid of it for the time I need to
switch over is to lock the user account, find the SID and SERIAL# of the
session(s) and kill them.  Maybe there's a better way, but it works.
Until I try to script it.  Here's the relevant portion of the
script(ksh):
declare
  STR VARCHAR2(2000);
begin
  for x in (select * from v\$session) LOOP
    IF x.user# = 27 then
      str := ' alter system kill session ''' || x.sid || ',' ||
x.serial# ||'''';     
      execute immediate str;
     END IF;
   END LOOP;
end;
/
But when I run it I get:
sqlplus "/ as sysdba" <<EOJ

declare

  STR VARCHAR2(2000);

begin

  for x in (select * from v$session) loop
    IF x.user# = 27 then
      str := ' alter system kill session ''' || x.sid || ',' ||
x.serial# ||'''';
      execute immediate str;
    End if;
  END LOOP;
end;

EOJ
session: Undefined variable.
logout

It works in "pure" sqlplus, just not in the script. 

Ideas?  Thanks.


This electronic message transmission is a PRIVATE communication which contains
information which may be confidential or privileged. The information is 
intended 
to be for the use of the individual or entity named above. If you are not the 
intended recipient, please be aware that any disclosure, copying, distribution 
or use of the contents of this information is prohibited. Please notify the
sender  of the delivery error by replying to this message, or notify us by
telephone (877-633-2436, ext. 0), and then delete it from your system.

Other related posts: