Génération d'un fichier à l'aide de SQL*Plus et print
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é :
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 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
! |
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.
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 :no:). Le code erreur est bien généré, mais je retrouve toujours mon erreur liée à PRINT.
D'avance merci.
Bonne journée.