2010-09-09 7 views
3

Je dois écrire une requête qui devrait faire la tâche suivanteécriture d'une requête pour tuer une session utilisateur

select SID from v$session where username = 'some user' 

et s'il y a un SID par ce nom d'utilisateur particulier alors tuer que SID en utilisant la commande suivante:

alter system kill session 'sid'; 

Ce que je wrtten est actuellement le suivant:

alter system kill session 
    where sid = select sid from v$session where username = 'some user' 

Cette requête échoue lorsque i s pas sid particulier par ce nom d'utilisateur

La requête doit être telle qu'il n'y a pas d'utilisation d'accolades « { » ou « } »

Et la requête doit être juste une seule requête en ligne, pas de ligne multiple requêtes.

La DB est Oracle10g

Toutes les suggestions ??

+0

Pourquoi les accolades monodirectionnelles et non-bouclées? – Rup

+0

Cela ressemble à des devoirs des restrictions arbitraires. ALTER SESSION n'a pas de clause WHERE de toute façon, donc ce que vous avez écrit ne fonctionnera jamais. –

Répondre

6

Ce que je fais habituellement est:

select 'alter system kill session '''||sid||','||serial#||''';' 
from v$session 
where username = 'someuser'; 

Ceci renverra des résultats comme:

alter system kill session '11,222'; 
alter system kill session '22,444'; 

Je puis simplement copier et coller le résultat que je veux exécuter.

Pas d'accolades (comment pourrait-il y en avoir?), Mais je ne suis pas sûr qu'il réponde à votre règle d'une ligne.

+0

Peut-être que cela pourrait être combiné avec EXECUTE IMMEDIATE en quelque sorte? –

+0

Grande réponse !!! – geoand