Interraction avec un script

Interraction avec un script - SQL/NoSQL - Programmation

Marsh Posté le 25-10-2005 à 15:36:17    

Bonjour,
 
J'ai des script sql que je creer et que je dois faire executer en production par les equipes de production. Le process stimule que je dois prevoir le nombre de modification que cela dois impliquer sur les table cible.
 
Je dois faire un script SQL qui dois afficher a l'utilisateur les nombre de modification faites et lui laissez le choix de faire un comit ou rollback.
 
Dans l'etat actuel des choses je procede comme cela. Je recupere dans le fichier ${VAR_UT_CONNECT_STRING} les modifications réalisées.
 

Code :
  1. sqlplus -S /NOLOG <<_EOT
  2.         WHENEVER OSERROR EXIT FAILURE
  3.         WHENEVER SQLERROR EXIT SQL.SQLCODE
  4.         SPOOL ${VAR_UT_SQL_FILE_RES}
  5.         CONN ${VAR_UT_CONNECT_STRING}
  6.         SPOOL OFF
  7.         SET HEADING OFF
  8.         SET VERIFY OFF
  9.         SPOOL ${VAR_UT_SQL_FILE_RES}
  10.         ${VAR_UT_SQL_CMD};
  11.         SPOOL OFF
  12.         QUIT
  13. _EOT


 
Par contre, je ne sais pas comment faire pour que l'utilisateur puisse le voir et saisir, et lui laisser la possiblilité de faire un commit ou rollback. Je sais meme pas si c est possible.  
 
Toutes les idées, ou liens sont les bienvenues. Merci

Reply

Marsh Posté le 25-10-2005 à 15:36:17   

Reply

Marsh Posté le 25-10-2005 à 23:01:38    

Tu peux utiliser le mot clé ACCEPT, exemple ici :
 
http://www.easyprogs.com/index.php [...] sation.php
 
et tu pourras afficher qqch comme :
 
"Faire un commit (C) ou rollback (R) ?"
 
et boucler tant que l'utilisateur ne choisit pas entre C et R :)
 
edit : pour l'affichage d'infos, tu peux utiliser dbms_output.

Message cité 1 fois
Message édité par Beegee le 25-10-2005 à 23:03:24
Reply

Marsh Posté le 26-10-2005 à 09:17:25    

Merci je vais essayé ca, je reviendrai peut etre posté car je ne suis pas un expert sqlplus :)
 

Reply

Marsh Posté le 26-10-2005 à 09:32:43    

Beegee a écrit :


"Faire un commit (C) ou rollback (R) ?"
 
et boucler tant que l'utilisateur ne choisit pas entre C et R :)


 
J ai bien integrer le ACCEPT et la saisie d'une reponse par contre comment fais tu pour faire une boucle tant qu on as pas R ou C.
 
Il faut du conditionnel pour tester C ou R et il faut une boucle type while. Dans le lien que tu as donné cela n est pas abordé.
 
Merci

Reply

Marsh Posté le 26-10-2005 à 09:45:03    

WHILE <condition>
LOOP
  <loop_body>
END LOOP;
 
Donc dans ton cas :
 
WHILE (reponse <> 'C' AND reponse <> 'R')
LOOP
  ACCEPT ...
END LOOP;

Reply

Marsh Posté le 26-10-2005 à 15:03:54    

Bon je travail dessus mais j avance pas des masses. J ai un certain nombre de question.
 
Voici mon script : update.sql

Code :
  1. update parpostes set parvan2=1 where partabl=1436 and parpost=1;
  2. HOST echo `cat vide.txt`
  3. WHILE (reponse <> 'C' AND reponse <> 'R')
  4. ACCEPT reponse PROMPT 'Validation de la requete : C =COMMIT R =ROLLBACK :'
  5. IF (reponse = 'C')
  6. COMMIT;
  7. ELSE
  8. ROLLBACK;
  9. END;
  10. END LOOP;


 
Maintenant voici les resultats.

Code :
  1. SQL> start update.sql
  2. 2 rows updated.
  3. SP2-0734: unknown command beginning "WHILE (rep..." - rest of line ignored.
  4. Validation de la requete : C =COMMIT R =ROLLBACK :C
  5. SP2-0734: unknown command beginning "IF (repons..." - rest of line ignored.
  6. Commit complete.
  7. SP2-0042: unknown command "ELSE" - rest of line ignored.
  8. Rollback complete.
  9. SP2-0042: unknown command "END IF" - rest of line ignored.
  10. SP2-0042: unknown command "END LOOP" - rest of line ignored.
  11. SQL>


 
Donc j arrive pas afaire fonctionner le While ni le IF.
Merci de ton aide beegee

Reply

Marsh Posté le 26-10-2005 à 15:18:24    

Faut faire du PL/SQL, par conséquent, un BEGIN ... END;
 

Code :
  1. DECLARE
  2.   reponse VARCHAR2(1) := 'A';
  3. BEGIN
  4.   UPDATE parpostes
  5.   SET parvan2=1
  6.   WHERE partabl=1436
  7.   AND parpost=1;
  8.   -- A quoi te sert HOST ???
  9.   HOST echo `cat vide.txt` 
  10.   -- On boucle en attente de reponse de commit ou rollback.
  11.   WHILE (reponse <> 'C' AND reponse <> 'R')
  12.   LOOP
  13.     ACCEPT reponse PROMPT 'Validation de la requete : C =COMMIT R =ROLLBACK :'
  14.   END LOOP;
  15.   -- Une fois la boucle terminee, reponse a la valeur C ou R.
  16.   IF (reponse = 'C')
  17.   THEN
  18.     COMMIT;
  19.   ELSE
  20.     ROLLBACK;
  21.   END IF;
  22. END;


Message édité par Beegee le 26-10-2005 à 15:19:51
Reply

Marsh Posté le 26-10-2005 à 15:40:29    

Pour le HOST j'affiche des infos contenu dans un fichier texte mais c est pas primordiale.
 
J ai mis ton scritp dans un fichier : update.sql
 

Code :
  1. SQL> start update.sql
  2. 26 /
  3.     ACCEPT reponse PROMPT 'Validation de la requete : 1 =COMMIT 2 =ROLLBACK :'
  4.            *
  5. ERROR at line 9:
  6. ORA-06550: line 9, column 12:
  7. PLS-00103: Encountered the symbol "REPONSE" when expecting one of the
  8. following:
  9. := . ( @ % ;


Il semblerai qu il ai une erreur au niveau du ACCEPT
Je planche sur le PL/SQL, que je ne connaissait pas. Je ne trouve ACCEPT.
Ca ouvre des perspectives tres interessantes. Je vais demandé une formation a ma boite :)


Message édité par td-rat le 26-10-2005 à 16:52:56
Reply

Marsh Posté le 26-10-2005 à 16:58:34    

Fais plutôt :
 

Code :
  1. BEGIN
  2.   UPDATE parpostes
  3.   SET parvan2=1
  4.   WHERE partabl=1436
  5.   AND parpost=1;
  6.   -- A quoi te sert HOST ???
  7.   HOST echo `cat vide.txt` 
  8.   -- On boucle en attente de reponse de commit ou rollback.
  9.   ACCEPT reponse VARCHAR2(1) PROMPT 'Validation de la requete : C =COMMIT R =ROLLBACK :'
  10.   WHILE (reponse <> 'C' AND reponse <> 'R')
  11.   LOOP
  12.     ACCEPT reponse VARCHAR2(1) PROMPT 'Validation de la requete : C =COMMIT R =ROLLBACK :'
  13.   END LOOP;
  14.   -- Une fois la boucle terminee, reponse a la valeur C ou R.
  15.   IF (reponse = 'C')
  16.   THEN
  17.     COMMIT;
  18.   ELSE
  19.     ROLLBACK;
  20.   END IF;
  21. END;


 
(c'est la 1ère fois que j'utilise ACCEPT :D )

Reply

Marsh Posté le 26-10-2005 à 17:06:54    

Pas mieux :

Code :
  1. SQL> start update3.sql
  2. 22  /
  3.   ACCEPT reponse VARCHAR2(1) PROMPT 'Validation de la requete : C =COMMIT R =ROLLBACK :'
  4.          *
  5. ERROR at line 8:
  6. ORA-06550: line 8, column 10:
  7. PLS-00103: Encountered the symbol "REPONSE" when expecting one of the
  8. following:
  9. := . ( @ % ;
  10. ORA-06550: line 8, column 30:
  11. PLS-00103: Encountered the symbol "PROMPT" when expecting one of the following:
  12. := ; not null default character


 
 
Je cherche aussi de mon coté mais les exemples avec ACCEPT ne courrent pas les rues.
Sinon y a pas une autre maniere?
 
 
 
 

Reply

Marsh Posté le 26-10-2005 à 17:06:54   

Reply

Marsh Posté le 26-10-2005 à 17:19:55    

Y a un bon exemple ici :
 
http://www.csee.umbc.edu/~mikeg/cmsc461/plsql.sql
 
ACCEPT est un mot clé de sqlplus, et non de PL/SQL comme je le pensais ... du coup, il faut que tu adaptes le code, mais je vois pas trop comment faire la boucle maintenant :D

Reply

Marsh Posté le 20-12-2005 à 17:31:53    

J'ai besoin de faire le même genre de script, et je ne m'en sors pas pour faire la boucle LOOP à cause du ACCEPT... Est-ce que l'un de vous 2 avez finalement trouvé la solution?
Je suis très intéressée!
 
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed