Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2011, 11h36   #1
Invité de passage
 
Inscription : février 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 6
Points : 2
Points : 2
Par défaut quitter un script (sql) si count(*) = 0

Bonjour et bonne année à toutes et à tous,

Tout est dans le titre mais je détaille un peu ca ne fera pas de mal :

Le contexte : je dois extraire (dans un fichier texte) au max 5000 lignes d'une table par jour. Le système qui recevra ces données ne peut en effet pas intégrer plus de 5000 lignes par jour et la table d'où viennent ces données peut très bien être vide de temps à autre.

Mon but : je souhaite "quitter" mon script (qui suit après) si le résultat d'un select count(*) renvoie zéro et donc ne pas exécuter ce qui suit après mon count(*) ! Trop simple pour moi ! M'enfin je n'arrive pas à trouver le début d'une piste !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
--Début de mon script 
--C'est ici que je teste si mon count(*) renvoie zéro
--donc j'aimerais à cet endroit faire un truc du style 
 
COLUMN nombre_lignes new_value nb_lignes noprint
 
SELECT count(*)
AS nombre_lignes
FROM MA_TABLE;
 
IF nb_lignes = 0 then EXIT QUIT ABORT OR something LIKE that ;-)
 
-- reste du sql classique

Petite précision le script est lancé sous Unix avec SqlPlus 10.2
Quelqu'un quelqu'une aurait il-elle une ombre de soluce pour moi ?
roto_plouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 15h46   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Je ne suis pas très habitué au scriptage sqlplus mais voici une approche possible :
Utiliser WHENEVER SQLERROR EXIT FAILURE dans le script sql et générer une erreur via un bloc pl/sql. Donc s'il n'y a pas d'erreur le spool se fera sinon le script s'arrête.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
WHENEVER SQLERROR EXIT FAILURE
SET feedback off
SET linesize 1000
SET trimspool ON
SET verify off
SET termout off
SET embedded ON
SET long 200000
SET pages 0
 
declare
  l_row_exists integer;
begin
  -- Test si au moins une ligne existe
  SELECT 1 INTO l_row_exists 
  FROM emp
  WHERE rownum = 1;
exception
  when no_data_found then
    --log table vide
    raise;
  when others then
    --log autre erreur
    raise;
end;
/
 
SET echo off
spool export.txt
 SELECT * FROM emp;
spool off
!cat export.txt
exit
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2011, 16h23   #3
Invité de passage
 
Inscription : février 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 6
Points : 2
Points : 2


Et hop un petit tag Résolu !!!

A tester au boulot mais "à la maison" çà marche au poil !!!

Super merci ... j'avoue que je tournais autour du whenever mais sans penser faire un brin de PL/SQL ... Ben oui je cherchouille plutôt que d'attendre une réponse toute cuite ... M'enfin la soluce arrive souvent avant ma trouvaille.

En tout cas, ta réponse répond à 100 % à mon besoin.
C'est nickel !!!!!

Daniel.
roto_plouf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h38.


 
 
 
 
Partenaires

Hébergement Web