Bonjour,
Je voulais savoir s'il existait l'équivalent oracle de sqlcmd en SQL Server et qui ne soit pas SQL*Plus. Je voudrais juste un outil en ligne de commande DOS pour lancer un script SQL sur oracle en écrivant l'output dans un fichier.
Merci
Version imprimable
Bonjour,
Je voulais savoir s'il existait l'équivalent oracle de sqlcmd en SQL Server et qui ne soit pas SQL*Plus. Je voudrais juste un outil en ligne de commande DOS pour lancer un script SQL sur oracle en écrivant l'output dans un fichier.
Merci
Et que reproches-tu à sqlplus ?
En quoi ne répond-il pas à ton cahier des charges ?
J'ai besoin de pouvoir lancer mon script SQL depuis une commande DOS et de pouvoir générer un fichier d'output, est-ce possible avec SQL*Plus ? Je ne connais pas cet outil, je viens du monde Sybase/SQL Server.
C'est tout à fait possible et sans doute pas plus compliqué qu'avec sqlcmd.
Le nom du fichier de script est l'un des paramètres de la commande sqlplus et celui du fichier de sortie peut être ajouté en paramètre complémentaire et pris en charge dans le script.
en faisant sqlplus dans le prompt cmd DOS, il me demande de me connecter, moi je veux une solution que je peux automatiser via un ordonnanceur par exemple, il ne faut donc pas qu'il y ait des étapes de saisies. Sais-tu comment gérer les paramètres de connexions et d'output dans les paramètre de la commande sqlplus du coup s'il te plaît ?
J'arrive à me connecter comme ceci :
Mais avec quel argument en plus puis-je lui dire de m'exécuter mon script toto.sql ?Code:sqlplus login/password@//hostname:port/servicename
As-tu regardé dans la documentation ?
Il suffit d'ajouter à ta ligne de commande @nom_du_script suivi des arguments du script.
Merci, l'appel fonctionne en faisant comme ça depuis DOS :
mais ça me retourne juste un numéro de ligne correspondant au dernier "end if;" du script : " 20 " et les procédures stockées ne sont pas appelées. Je dois faire CTRL+C pour sortir et j'ai bien un fichier results.txt qui se crée avec comme contenu : " 20 ".Code:sqlplus login/password@//hostname:port/servicename @monscript.sql
Je cherche à enregistrer la log dans un fichier et accessoirement chronométrer la durée d'exécution.
Voici monscript.sql :
Pour info, quand je lance le script suivant depuis sqldevelopper, ça fonctionne bien :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 SPOOL results.txt SET SERVEROUTPUT ON SET TIMING ON declare res number; errorText varchar2(32767); begin MYPROCSTOCK(1, 'aname1', '', '', 'alogin', res, errorText); if res != 0 then dbms_output.put_line('ID ' || To_Char(1) || ' - ' || 'An error occured : ''' || errorText || ''''); else dbms_output.put_line('ID ' || To_Char(1) || ' - ' || 'DONE'); end if; MYPROCSTOCK(2, 'aname2', '', '', 'alogin', res, errorText); if res != 0 then dbms_output.put_line('ID ' || To_Char(2) || ' - ' || 'An error occured : ''' || errorText || ''''); else dbms_output.put_line('ID ' || To_Char(2) || ' - ' || 'DONE'); end if; end; SPOOL OFF
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 SET SERVEROUTPUT ON declare res number; errorText varchar2(32767); begin MYPROCSTOCK(1, 'aname', '', '', 'alogin', res, errorText); if res != 0 then dbms_output.put_line('ID ' || To_Char(1) || ' - ' || 'An error occured : ''' || errorText || ''''); else dbms_output.put_line('ID ' || To_Char(1) || ' - ' || 'DONE'); end if; MYPROCSTOCK(2, 'aname', '', '', 'alogin', res, errorText); if res != 0 then dbms_output.put_line('ID ' || To_Char(2) || ' - ' || 'An error occured : ''' || errorText || ''''); else dbms_output.put_line('ID ' || To_Char(2) || ' - ' || 'DONE'); end if; end;
Il faut que votre code se termine ainsi :
Code:
1
2
3 end; / SPOOL OFF
Le "/" fonctionne effectivement, merci !
Pouvez-vous me dire où je pouvais trouver cette info, histoire de voir ce que j'ai loupé ?
Autre chose, dans un script exécuté par SQLPLUS, est-ce que "SET SERVEROUTPUT ON" a du sens ?
Je l'avais mis quand j'exécutais par sqldeveloper afin d'avoir l'output dans la fenêtre de Sortie SGBD.