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 Go to next message](/forum/theme/orafaq/images/down.png) |
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 message Go to previous message](/forum/theme/orafaq/images/up.png) ![Go to next message Go to next message](/forum/theme/orafaq/images/down.png) |
![](http://www.orafaq.com/forum/images/custom_avatars/102589.gif) |
Michel Cadot
Messages: 68675 Registered: March 2007 Location: Nanterre, France, http://...
|
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
|
|
|
|
Goto Forum:
Current Time: Sat Sep 07 19:23:15 CDT 2024
|