2010-03-11 8 views
2

Comment détecter l'état SCAN actuel et le rétablir après l'avoir modifié?Rétablissement de l'état d'analyse lors de la demande de valeurs variables

Un Exerpt du script en question:

SET SCAN OFF 
SET ECHO ON 
SET SQLBLANKLINES ON 

SET SCAN ON 
UPDATE TABLE_NAME SET CREATED_BY = &&created_by; 
SET SCAN OFF 

Le problème est que si le script n'a pas la première ligne (SET SCAN OFF), puis le code pour inviter l'utilisateur ne doit pas tourner l'état SCAN éteint après. La solution de pseudo-code:

-- The next line might not exist, or be "SET SCAN ON". 
SET SCAN OFF 
SET ECHO ON 
SET SQLBLANKLINES ON 

-- Remember if the scanning was on or off. 
PUSH SCAN STATE 
SET SCAN ON 
UPDATE TABLE_NAME SET CREATED_BY = &&created_by; 

-- Revert scanning to its former state. 
POP SCAN STATE 

La ligne PUSH SCAN STATE rappelle l'état de sorte que si le code est modifié en supprimant la première ligne, le reste du script fonctionne toujours comme prévu, en raison de la corresonding POP SCAN STATE.

+0

Vous pourriez SHOW SCAN' en haut et réinitialiser manuellement par la suite si nécessaire. –

+0

@Jeffrey: Je suis à la recherche d'une solution automatisée. –

+0

J'ai compris cela, c'est pourquoi j'ai fait le commentaire mais pas une réponse - je suppose qu'il n'y a pas de solution. –

Répondre

1

la commande SQL , plus STORE est censé le faire, malheureusement, il ne semble pas enregistrer l'état SCAN (SQL plus 9.2.0.1.0). Je démontrerai avec un autre paramètre (TIMING):

SQL> show timing 
timing OFF 
SQL> -- save parameters into an os file 
SQL> store set param.sql create 
Created file param.sql 
SQL> -- run script 
SQL> SET TIMING ON 
SQL> show timing 
timing ON 
SQL> -- reset state 
SQL> @param.sql 
SQL> show timing 
timing OFF 
+0

Merci pour ça. Bonne idée et me fournit un domaine à explorer. Dommage que cela ne résout pas réellement le problème. –