SQL* ou PL/SQL PB DE SPOOL

neena Messages postés 46 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 12 février 2007 - 24 janv. 2006 à 11:19
neena Messages postés 46 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 12 février 2007 - 25 janv. 2006 à 09:36
Salut,


Je ne sais pas si vous pouvez aider mais je vous explique mon petit pb : Je dois ecrire via une requete dans un fichier txt mais je dois faire ça dans une procedure en pl/sql.
1- ma requete seule marche, elle me creer mon fichier
2-des que je la met dans une procedure pl/sql elle ne marche plus.Apparemment il n'aime pas le spool ou les set...


Si vous avez une idée je prend....merci de m'avoir lu....


voila le code :


CREATE OR REPLACE procedure custom.create_file_error1 IS


BEGIN


set echo off
set heading off
set feedback off
set linesize 1200
set pagesize 10000



SPOOL "C:\koko";
SELECT EMS.IBO_ERROR_CODE.OBJECT_NAME ||'='|| EMS.IBO_ERROR_CODE.ERROR_VALUE
FROM EMS.IBO_ERROR_CODE
ORDER BY EMS.IBO_ERROR_CODE.OBJECT_NAME;
SPOOL OFF


END;
/

debutante un jour, confirmer pour toujours!!!

4 réponses

dba_votre_service Messages postés 4 Date d'inscription dimanche 15 janvier 2006 Statut Membre Dernière intervention 6 mai 2008 1
24 janv. 2006 à 22:16
Salut,

n'oublies pas la section qui précise ce que tu dois ajouter au init.ora pour autoriser l'accès en écriture à un disque depuis la base de données...si tu utilises une version antérieure à la 9.2. Peut-être que tu devras demander d'ajouter la section par ton dba préféré.

Le lien suivant en parle:
http://www.oracle.com/technology/sample_code/tech/pl_sql/htdocs/x/Utl_File/start.htm

Cordialement.
1
cs_cmart Messages postés 2 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 30 mai 2006
24 janv. 2006 à 20:30
Hello,
sqlplus est un outil qui permet d'exécuter une requête dans une base Oracle.
Ainsi , les ordres :
<li>set echo off,</li><li>set heading off</li><li>set feedback off</li><li>set linesize 1200</li><li>set pagesize 10000</li>sont des ordres de configuration de sqlplus. Ce n'est en aucun cas du PL/SQL et à fortiori du SQL.
Idem pour le SPOOL que permet de rediriger la sortie standard dans un fichier.

En pl/sql écrire dans un fichier est nettement plus "sportif" !

Il faut utiliser un package système nommé : UTL_FILE qui permet d'écrire dans des répertoires spécifiques et autorisés par la base de donnée elle même. (question de sécurité). Pour savoir lesquels, il faut regarder dans la vue systeme ALL_DIRECTORIES.

je vois plutôt la procédure comme suit :

CREATE OR REPLACE procedure custom.create_file_error1 IS

BEGIN

w_file utl_file.file_type; -- reference du fichier
w_line VARCHAR2(4096); -- ligne du fichier
w_directory VARCHAR2(100); -- repertoire du fichier
w_fichier VARCHAR2(50); -- nom du fichier

CURSOR curseur IS -- curseur pour contituer les lignes du fichier
SELECT EMS.IBO_ERROR_CODE.OBJECT_NAME ||'='|| EMS.IBO_ERROR_CODE.ERROR_VALUE AS LIGNE
FROM EMS.IBO_ERROR_CODE
ORDER BY EMS.IBO_ERROR_CODE.OBJECT_NAME;
BEGIN
w_directory := 'c:/mydir'; -- attention ce repertoire doit être un des répertoires autorisés par la base !
w_fichier := 'koko.txt';
w_file := utl_file.fopen(w_directory, w_fichier, 'w'); -- ouverture en écriture
IF utl_file.is_open(w_file) THEN
FOR ma_selection IN curseur LOOP -- pour faire au plus simple !
utl_file.put_line(w_file, ma_selection.ligne); --écriture d'une ligne avec retour charriot
END LOOP;
utl_file.fclose(w_file); -- fermeture du fichier
END IF;

-- ..suite du code si besoin (attention au traitement des exceptions Oracle!!)

END;

Attention hein ! c'est pas du 'pur' béton ! je ne l'ai ni compilé, ni exécuté car je n'ai pas de base Oracle dipo sous la main, néanmoins l'idée directrice est la bonne.

La documentation Oracle est en ligne sur : http://www.oracle.com/pls/db102/portal.portal_db?selected=5
il faut s'enregistrer pour pouvoir télécharger la doc au format PDF. c'est gratuit.

Bon courage.
Cmart
0
neena Messages postés 46 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 12 février 2007 2
24 janv. 2006 à 21:23
Merci Cmart,

Je vais voir, demain matin, si ton code fonctionne, merci de m'avoir répondu si rapidement, jespere y arriver...

:)

neena

debutante un jour, confirmer pour toujours!!!
0
neena Messages postés 46 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 12 février 2007 2
25 janv. 2006 à 09:36
Alors je suis désolée de vous avoir fait reflechir la dessus, mais mon boss prefere que je fasse une requete dans un fichier.sql et que je l'appelle via un script shell donc je plus besoin de passer par des commande oracle, je reste sous sqlplus.

Encore merci....

neena


debutante un jour, confirmer pour toujours!!!
0
Rejoignez-nous