web-dev-qa-db-fra.com

Comment utiliser sql * plus dans le script de commande Windows pour contrôler le flux?

J'essaie d'utiliser SQL * plus pour contrôler un petit script de commande Windows.

En gros, je veux exécuter un PL/SQL (peut-être sélectionner dans une vue ou une table ou exécuter une fonction) qui me montre l'état de certaines lignes de la base de données, puis en fonction de l'état des lignes, exécuter certaines commandes Windows.

Mon problème est de savoir comment obtenir les résultats dans le script de commande.

sqlplus user/password@server @script.sql

IF <CONDITIONAL HERE BASED on script.sql results> GOTO :runprocess

REM log and email that process had to be skipped
EXIT

:runprocess
REM run various Windows service commands
8
Cade Roux

C'est ce que j'ai fini par utiliser.

Mon script .cmd:

@ECHO OFF
ECHO Checking Oracle...

for /f %%i in ('sqlplus -s user/password@database @script.sql') do @set count=%%i
echo %count%

IF %count% GTR 0 GOTO :skipped
GOTO :runprocess

Où script.sql:

SELECT COUNT(*)
FROM table
WHERE criteria = 1;

exit
5
Cade Roux

J'écrirais probablement le script (ou le conditionnel, en fonction des exigences) à partir du script.sql appelé lui-même.

Par exemple, le script.sql suivant crée un fichier .bat windows_commands.bat:

set feedback off
set echo off
set trimspool on
set termout off
set serveroutput on size 100000 format wrapped
set lines 500
set pages 0

-- create the bat file to be executed later:
spool windows_commands.bat

declare
  c number;
begin

  select count(*) into c from dual;

  -- depending on a conditional, write the stuff to be executed into the
  -- bat file (windows_commands.bat)
  if c = 1 then
     dbms_output.put_line('@echo everthing ok with dual');
  else
     dbms_output.put_line('@echo something terribly wrong with dual');
  end if;

end;
/

spool off

exit

Vous pouvez ensuite appeler script.sql depuis un autre fichier .bat like de la manière suivante:

@rem create Oracle session, call script.sql
sqlplus %user%/%password%@%db% @script.sql

@rem script.sql has created windows_commands.bat.
@rem call this newly created bat file:
call windows_commands.bat
7

Je vous encourage fortement à pas utiliser des fichiers .bat. Vous avez beaucoup d'autres alternatives: C/C++ ou VB, Scripting Windows ou Powershell , ou même des téléchargements gratuits comme Perl ou Bash .

Mais voici un exemple de renvoi de codes d'erreur dans les fichiers .bat:

Mais s'il vous plaît regardez certains des liens que j'ai donnés ci-dessus. Éviter les fichiers .bat vous facilitera la tâche et en facilitera la maintenance à l'avenir.

A MON HUMBLE AVIS ...

3
paulsm4

Je fais quelque chose comme ceci en créant un fichier .bat qui s'occupe de Windows et en appelant des scripts SQL si nécessaire. Utilisez SQL pour spouler vos résultats dans un fichier texte que vous pouvez lire.

... les commandes ici

sqlplus/nolog @C:\Dump\DropRecreateUsers.sql

sqlplus/nolog @C:\Dump\Cleanup.sql

... les commandes

Dans SQL, utilisez cette commande spool C:\yourResults.txt ou, pour des utilisations plus sophistiquées, créez une procédure qui, lorsqu'elle est appelée, écrit les résultats dans un fichier texte à l'aide de UTL_FILE.

2
kevinsky

Je vous encourage à consulter les deux scripts inclus dans Oracle XE pour la sauvegarde et la restauration. Ces scripts m'ont beaucoup appris à gérer les scripts batch et Oracle sur la plate-forme Windows.

  • C:\oraclexe\app\Oracle\produit\11.2.0\serveur\bin\Backup.bat
  • C:\oraclexe\app\Oracle\produit\11.2.0\serveur\bin\Restore.bat
1
Bjarte Brandt

Connecté à: Oracle Database 11g Édition Entreprise Version 11.2.0.1.0 - Production 64 bits Avec les options de partitionnement, OLAP, d'exploration de données et de test d'applications réelles

SQL> @f:\testa.txt
0
Rizwan Basheer