Problème de procédure

bonito -  
DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,


Depuis peu j'ai migré ma base oracle 8i en 10g, à ce jour tout va pour le mieux, excepté ce problème de procédure. la procédure récupère des opérations dans une table, crée un fichier à un emplacement et insère les données dans ce fichier. Ma base est logé sous windows server 2003.


CREATE OR REPLACE PROCEDURE Pro_Transfertjournal
(p_dtoperation1 VARCHAR2,
p_dtoperation2 VARCHAR2,
p_journal VARCHAR2,
p_lignes OUT NUMBER,
p_fichier OUT VARCHAR2)
IS
v_ftransfere UTL_FILE.FILE_TYPE;
v_cpecriture ECRITURE.cp_ecriture%TYPE;
v_cpjournal ECRITURE.cp_journal%TYPE;
v_cpcompte ECRITURE.cp_compte%TYPE;
v_txsensecriture ECRITURE.tx_sensecriture%TYPE;
v_mtecriture ECRITURE.mt_ecriture%TYPE;
v_txlibecriture ECRITURE.tx_libecriture%TYPE;
v_dtoperation ECRITURE.dt_operation%TYPE ;
v_txpiececriture ECRITURE.tx_piececriture%TYPE;
v_dtecheance ECRITURE.dt_echeance%TYPE;
v_txcentre ECRITURE.tx_centre%TYPE;
v_txnature ECRITURE.tx_nature%TYPE;
v_txmatricule ECRITURE.tx_matricule%TYPE;
v_txeqt ECRITURE.tx_eqt%TYPE;
v_txtache ECRITURE.tx_tache%TYPE;
v_txbudget ECRITURE.tx_budget%TYPE;
v_txlib4 ECRITURE.tx_libre4%TYPE;
v_fichier VARCHAR2(200);
v_nbreligne NUMBER;


--Déclaration des variables
type_ligne_ecriture VARCHAR2(1);
date_piece ECRITURE.dt_operation%TYPE;
type_piece VARCHAR(4);


code_journal VARCHAR(5);
compte_general VARCHAR(9);
code_tiers VARCHAR(14);

numero_piece VARCHAR(14);
libelle_ecriture VARCHAR(127);

date_echeance ECRITURE.dt_echeance%TYPE;
sens VARCHAR(1);
devise_tenue_compte VARCHAR(3);



mode_reglement VARCHAR(9);
axe_analytique VARCHAR(9);
section_analytique VARCHAR(19);

matricule VARCHAR(10);
quantite VARCHAR(3);--NUMBER;

devise VARCHAR(3);
montant_devise_tenue_compte ECRITURE.mt_ecriture%TYPE;

analytique VARCHAR(3);
--montant_devise ECRITURE.mt_ecriture%TYPE;
profilTVA VARCHAR(50);
ancienCodeTiers VARCHAR(15);
tamponProfilTva VARCHAR(50);

profilTVALigne VARCHAR(10); --pour determiner le compte de tva correspondant à la ligne d'écritures






/** Recherche à l'aide du curseur des écritures non transferées */

CURSOR cur_transecriture
IS
SELECT cp_journal, cp_compte, tx_sensecriture, mt_ecriture,
tx_libecriture, dt_operation, tx_piececriture, tx_centre,
dt_echeance, tx_nature, tx_libre4, tx_matricule,tx_eqt,
tx_tache, tx_budget
FROM ECRITURE
WHERE tx_transfert = 'N' --C42TAIT n
AND dt_operation BETWEEN TO_DATE(p_dtoperation1,'DD-MM-YY') AND TO_DATE(p_dtoperation2,'DD-MM-YY')
AND cp_journal = UPPER (p_journal)
ORDER BY tx_piececriture;





BEGIN


compte_general :='10';
devise_tenue_compte :='XAF';



axe_analytique :=''; --information à completer
section_analytique :=''; --information à completer

matricule :='11';
quantite :='';

devise :='XAF';
mode_reglement :='CHQ';---Valeur par défaut;

v_nbreligne :=0;
v_fichier := 'okita_pour_sage' || LOWER (p_journal) || TO_CHAR(TO_DATE(p_dtoperation2, 'DD-MM-YY'),'DDMMYY') || '_' || TO_CHAR (SYSDATE, 'HH24_MI_SS') ||'.txt';
--v_ftransfere:= UTL_FILE.FOPEN('F:\commercial',v_fichier,'w');
v_ftransfere:= UTL_FILE.FOPEN('F:\commercial',v_fichier,'w');

OPEN cur_transecriture;

LOOP
FETCH cur_transecriture
INTO code_journal,code_tiers,sens ,montant_devise_tenue_compte,
libelle_ecriture, date_piece,numero_piece,v_txcentre,
date_echeance, type_piece, v_txlib4, matricule, v_txeqt,
v_txtache, v_txbudget;

EXIT WHEN cur_transecriture%NOTFOUND;
---modification de compte agent avec 6 positions en ajoutant un 0 le 03/12/2007 par mme Boucka G-----
--v_cpcompte := fct_correctcompte (v_cpcompte);

--Gestion du type de compte
section_analytique :='';
axe_analytique :='';
analytique:='NON';
profilTVA:='';
profilTVALigne:='';
ancienCodeTiers :=code_tiers;


--pour le v62
IF code_tiers LIKE 'C%' THEN
type_ligne_ecriture:='X';
compte_general:='411100';
type_piece:='FC';


END IF;


--on recupere le bon commpte
IF(code_journal ='V62') THEN
SELECT CP_COMPTE INTO profilTVALigne FROM ECRITURE WHERE ((TX_PIECECRITURE=numero_piece) AND (CP_COMPTE LIKE 'T%' OR CP_COMPTE LIKE '443%') AND (dt_operation>=p_dtoperation1));

IF (profilTVALigne<>'') THEN
code_tiers:=profilTVALigne;
END IF;



END IF;


--Compte de TVA
IF code_tiers LIKE 'T%' OR code_tiers LIKE '443200%' THEN
type_ligne_ecriture:='G';
compte_general:='443200';
code_tiers:='';

IF(montant_devise_tenue_compte<>0) THEN

tamponProfilTva:='TVA Collectée à 18% Ventes à Terme';
ELSE
tamponProfilTva:='TVA collectée exonerée';
END IF;



ELSIF code_tiers LIKE '443240%' THEN
type_ligne_ecriture:='G';
compte_general:='443240';
code_tiers:='';

IF(montant_devise_tenue_compte<>0) THEN
tamponProfilTva:='TVA Collectée à 18% Ventes Comptant aux voyageurs';
ELSE
tamponProfilTva:='TVA collectée exonerée';
END IF;

ELSIF code_tiers LIKE '443230%' THEN
type_ligne_ecriture:='G';
compte_general:='443210';
code_tiers:='';

IF(montant_devise_tenue_compte<>0) THEN
tamponProfilTva:='TVA Collectée à 18% Ventes au comptant';
ELSE
tamponProfilTva:='TVA collectée exonerée';
END IF;

END IF;






--pour le v65 Cash

IF code_tiers LIKE 'G%' THEN
type_ligne_ecriture:='X';
compte_general:='471500';
type_piece:='FD';


END IF;

IF code_tiers LIKE 'C9999%' THEN
type_ligne_ecriture:='X';
compte_general:='411100';
type_piece:='FC';


END IF;



--Formatage des differents comptes

IF code_tiers LIKE '7061010%' THEN --produit bagages
type_ligne_ecriture:='G';
compte_general:='706105';
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;



ELSIF code_tiers LIKE '7061120%' THEN --produit Messagerie
type_ligne_ecriture:='G';
compte_general:='706115';
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;



ELSIF code_tiers LIKE '7061300%' THEN --Manganese
type_ligne_ecriture:='G';
compte_general:='706125';
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;



ELSIF code_tiers LIKE '7061330%' THEN --Coque
type_ligne_ecriture:='G';
compte_general:='706130';
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;



ELSIF code_tiers LIKE '7061410%' THEN --Bois débité
type_ligne_ecriture:='G';
compte_general:='706145';
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;



ELSIF code_tiers LIKE '7073100%' THEN --Location de matériel ferroviaire
type_ligne_ecriture:='G';
compte_general:='707200';
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;



ELSIF code_tiers LIKE '7073200%' THEN --Loyes logements
type_ligne_ecriture:='G';
compte_general:='707300';
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;



ELSIF code_tiers LIKE '7%' AND code_journal LIKE 'V65%' THEN
type_ligne_ecriture:='G';
--compte_general:='706105';
type_piece:='OD';
--analytique:='OUI';
compte_general:=code_tiers;
compte_general := SUBSTR (compte_general,1,6);
code_tiers:='';
section_analytique :='VE000-PP3-PP4';



ELSIF code_tiers LIKE '7%' AND code_journal LIKE 'V62%' THEN
type_ligne_ecriture:='G';
--compte_general:='706105';
compte_general:=code_tiers;
compte_general:= SUBSTR (compte_general,1,6);
code_tiers:='';
section_analytique :='VE000-PP3-PP4';
profilTVA:=tamponProfilTva;

END IF;


IF code_journal LIKE 'V62%' THEN
type_piece:='FC';
ELSE
type_piece:='OD';
profilTVA:='';
END IF;

IF(montant_devise_tenue_compte<>0) THEN

UTL_FILE.PUT_LINE(v_ftransfere, type_ligne_ecriture || ';' || TO_CHAR (date_piece) || ';' || type_piece || ';'
|| code_journal || ';' || compte_general || ';'
|| code_tiers || ';' || numero_piece || ';'
|| libelle_ecriture || ';' || TO_CHAR (date_echeance) || ';'
|| sens || ';' || devise_tenue_compte || ';' || devise
|| ';'|| TO_CHAR (montant_devise_tenue_compte) || ';' || TO_CHAR (montant_devise_tenue_compte) || ';' || mode_reglement || ';'
|| axe_analytique || ';' || section_analytique || ';' || matricule || ';'||quantite||';'||profilTVA||';');

v_nbreligne := v_nbreligne + 1;
END IF;




END LOOP;

CLOSE cur_transecriture;
p_lignes := v_nbreligne;


/** Mise à jour de la table Ecriture **/

UPDATE ECRITURE
SET tx_transfert = 'O',
tx_fichier = '\\Srv-donnees\F:\commercial\' || v_fichier
WHERE dt_operation <= p_dtoperation2
AND dt_operation BETWEEN TO_DATE(p_dtoperation1,'DD-MM-YY') AND TO_DATE(p_dtoperation2,'DD-MM-YY')
AND cp_journal = UPPER (p_journal)
AND tx_transfert = 'N';

p_fichier := v_fichier;

COMMIT;

UTL_FILE.FCLOSE (v_ftransfere);

EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR (-20003, 'Aucune donnée trouvée ou JOURNAL erroné !');


END ;
/

2 réponses

DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
 
Bonito,

Parfais pour la proc et la description mais donnes nous l'erreur que tu rencontres lorsque tu exécutes cette proc.

Droe
0
bonito
 
le message d'erreur est ORA-29280
0
DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
 
Ok.

En oracle 10 le paramètre utl_file_dir est obsolète.
si tu veux que celà fonctionne verifie que :
SQL > show parameter utl_file_dir
te donne bien F:\commercial sinon change le dans ton init.ora
ou dans Spfile avec un alter system set ......scope=both;

Sinon la bonne manière c'est celle ci ci-dessous.

Sous 10g celà est géré par des directory maintenant;
1.
SQL> CREATE OR REPLACE DIRECTORY TRANS_JOUR AS 'F:\COMMERCIAL\';

2.
SQL> GRANT READ, WRITE ON DIRECTORY TRANS_JOUR TO ton_user;

3.
SQL> SELECT * FROM all_directories;
Pour vérifier les directory

4
v_ftransfere:= UTL_FILE.FOPEN('F:\commercial',v_fichier,'w');
devient
v_ftransfere:= UTL_FILE.FOPEN('TRANS_JOUR',v_fichier,'w'); 



Teste cela et dis nous!

DROE
http://www.dba-ora.fr
L'expérience, c'est le nom que chacun donne à ses erreurs
0
DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
 
Surtout ne réponds pas !!!
0