Problème de procédure

Fermé
bonito - 7 juin 2012 à 09:41
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 - 12 juin 2012 à 07:37
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 mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
7 juin 2012 à 12:35
Bonito,

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

Droe
0
le message d'erreur est ORA-29280
0
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
Modifié par DROE le 7/06/2012 à 19:59
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 mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
12 juin 2012 à 07:37
Surtout ne réponds pas !!!
0