Bonjour à toutes et tous,
Je bute sur un problème relativement simple, mais je n'arrive pas à trouver la solution. J'utilise SQL+ dans un shellscript Unix afin de générer des fichiers EDI. Voici le code utilisé :
Dans un premier temps je vérifie s'il y a des enregistrements dans matable avec le statut=7, si oui on exécute Ma_procedure_SQL(:vdata) dont le résultat est récupéré dans vdata qui est un ref cursor.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
34
35
36
37
38
39
40 sqlplus -S usr/pswd@$serv<<!>>${chem_log}${fich_log} WHENEVER SQLERROR EXIT 1; WHENEVER OSERROR EXIT 2; SET SERVEROUTPUT ON SIZE 1000000 SET LINESIZE 500 SET ECHO OFF SET FEED OFF SET HEADING OFF SET HEAD OFF SET NEWPAGE NONE SET PAGESIZE 0 SET TRIMSPOOL ON SPOOL /mondossier/monfichier var vdata refcursor DECLARE vlignes number; BEGIN --on verifie si on doit lancer la requete ou non select count(*) into vlignes from matable where statut = 7; --On extrait les donnees de la table contenant resultat si on a trouve des lignes if (vlignes>0) then Ma_procedure_SQL(:vdata); delete matable where statut = 7; else select * from dummy; -- on genere une erreur pour quitter avec code erreur 3 et gerer dans shellscript end if; END; / print vdata; spool off quit !
Tant que j'ai des lignes, cela se passe bien, mais si vdata est vide ou null, la fonction PRINT génère une erreur.
Ma question est donc la suivante, y a-t-il un moyen de tester vdata juste avant print afin d'éviter la génération d'une erreur? Ou peut-on passer un paramètre à PRINT afin que la fonction ne prenne pas en compte vdata lorsqu'il est vide?
Actuellement je génère volontairement une erreur pour récupérer le code erreur dans le shellscript et traiter en fonction (mais je ne trouve pas cela très élégant ). Le code erreur est bien généré, mais je retrouve toujours mon erreur liée à PRINT.
D'avance merci.
Bonne journée.
Partager