Home » Non-English Forums » French » varier le nom des tables
varier le nom des tables [message #445364] Mon, 01 March 2010 03:31 Go to next message
bonoua
Messages: 2
Registered: March 2010
Location: Lomé
Junior Member
Salut à Tous !

Je suis débutante en oracle et nouvelle sur ce forum et j ai besoin d 'aide .
Voici ma procedure :
PROCEDURE p_trafic  IS
cursor c1 is
select distinct (to_char(DATDEB_COM,'DAY'))jour,'[07H-19H[' classe, h.code_agregat,libel,  
sum(duree)duree_sec,  floor(sum(duree)/60) duree_mn,
count(1) nbre_appels, sum(mnt_com) ca_HT
from H_COM_A2009_P05_TA  h, p_code_agregat p
where  h.code_agregat = p.code_agregat
and  to_number(to_char(DATDEB_COM,'HH24')) between 7 and 18 
and trunc(DATDEB_COM) not in (select dat_jour from p_tabjour)
--and nd ='2250833'
group by to_char(DATDEB_COM,'DAY') ,'[7H-19H[' , h.code_agregat,libel;

l_c1 c1%rowtype;
v_ligne varchar2(255);
fichier_result   Text_IO.File_Type;        
i number:=0;
v_agregat number;
v_date date;
v_heure varchar2(2);
v_jour varchar2(30);
v_classe varchar2(15);
v_montant number;
v_duree_sec number;
v_duree_mn number;
v_libel varchar2(20);
v_nbre number ;
--var1 varchar2(30);
 v_total1 number:=0;
      v_total2 number:=0;
      v_total3 number:=0;
      v_total4 number:=0;
      v_total5 number:=0;
      var1 varchar2(30);

v_com date;
BEGIN
fichier_result:= Text_IO.Fopen(:B_OPTIONS.FICHIER, 'w');
open c1;
--titre
  v_ligne := 'COMPORTEMENT DES CLIENTS ';
	Text_IO.Put_Line(fichier_result, v_ligne);
--entetes
	v_ligne := 'JOUR;CLASSE;CODE_AGREGAT;LIBELLE;DUREE_SEC; DUREE_MN; NBRE_APPELS; CA_HT';
	Text_IO.Put_Line(fichier_result, v_ligne);
	loop
  fetch c1 into l_c1;
  exit when c1%notfound;
  v_jour :=l_c1.jour;
  v_classe :=l_c1.classe;
  v_agregat :=l_c1.code_agregat;
  v_libel :=l_c1.libel;
 
  v_montant:=l_c1.ca_ht;
  v_duree_sec:=l_c1.duree_sec;
  v_duree_mn:=l_c1.duree_mn;
  v_nbre :=l_c1.nbre_appels;
  
   v_ligne :=  l_c1.jour||';'||l_c1.classe||';'||l_c1.code_agregat||';'||l_c1.libel||';'||
l_c1.duree_sec||';'||l_c1.duree_mn||';'||l_c1.nbre_appels| |';'||l_c1.ca_ht;
	  
	 Text_IO.Put_Line(fichier_result, v_ligne);
	  
	  v_total1 :=v_total1+l_c1.duree_sec;
    v_total2 :=v_total2+l_c1.duree_mn;
    v_total3 :=v_total3+l_c1.nbre_appels;
    v_total4 :=v_total4+l_c1.ca_ht;
	
   insert into trafic_tgt2009
( JOUR,CLASSE,AGREGAT,LIBEL ,DUREE_SEC, DUREE_MN,NBRE_APPELS,CA_HT, MOIS,ANNEE)
   values (v_jour,v_classe,v_agregat,v_libel,v_duree_sec,v_duree_mn,
v_nbre,v_montant,:B_OPTIONS.p_mois,:B_OPTIONS.p_annee);
   commit;clear_message;
  
	end loop;

  close  c1;
  
	v_ligne := 'TOTAL;'||';'||';'||';'||v_total1||';'||
         v_total2||';'||v_total3||';'||v_total4;
    Text_IO.Put_Line(fichier_result, v_ligne);
    Text_IO.Fclose(fichier_result);
END;

Cette procédure marche quand le nom de la table est fiée en dure.
J 'aimerai la faire varier en précisant l 'année et le mois comme paramètre. Si je fais année 2009 et mois Mai la table devient table H_COM_A2009_P05_TA .
Si je fais année 2010 , mois 03 la table devient H_COM_A2010_P03_TA.
Exemple
PROCEDURE p_trafic (p_annee number, p_mois varchar2) IS

[Updated on: Mon, 01 March 2010 05:55] by Moderator

Report message to a moderator

Re: varier le nom des tables [message #445385 is a reply to message #445364] Mon, 01 March 2010 06:05 Go to previous messageGo to next message
Michel Cadot
Messages: 68728
Registered: March 2007
Location: Saint-Maur, France, https...
Senior Member
Account Moderator
Tout d'abord cela serait plus facile de lire et debugger votre code si vous l'écriviez proprement, en indentant correctement chaque paragraphe et en n'utilisant que des lignes d'au plus 80/100 caractères (donc, pas plus de 3 caractères par niveau d'indentation, ne pas utiliser les tabulations).

Il n'est pas possible de faire varier le nom de la table à moins d'utiliser du SQL dynamique:
execute immediate 'une chaîne contenant le texte de la requête';
etc...
Voir PL/SQL User's Guide and Reference
Chapter 7 Performing SQL Operations with Native Dynamic SQL

De plus, il n'est pas propre que la procédure "committe", seule l'application appelante sait s'il doit y avoir validation ou non du travail fait par la procédure. C'est comme pour votre travail, seul votre chef peut valider votre travail, ce n'est pas vous qui le faites (et pouvez le faire).

Cordialement,
Michel

[Updated on: Mon, 01 March 2010 06:05]

Report message to a moderator

Re: varier le nom des tables [message #445386 is a reply to message #445385] Mon, 01 March 2010 06:33 Go to previous message
bonoua
Messages: 2
Registered: March 2010
Location: Lomé
Junior Member
Merci . Je crois que ça pourra m aider.
Previous Topic: Problème de récuperation de BDD ORA-01190
Next Topic: Piloter l'assistant par batch
Goto Forum:
  


Current Time: Sat Dec 21 19:21:16 CST 2024