1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
create or replace PROCEDURE BDEHISTO AS
v_Periodicite number;
v_table varchar2(50);
v_table_exception varchar2(50);
v_requete varchar2(2000);
v_verif_purge varchar2(100);
v_error_code varchar2(50);
v_error_message varchar2(100);
l_mailhost VARCHAR2(64) := '*****';
l_from VARCHAR2(64) := '****@****.fr';
l_subject VARCHAR2(64) := '*****';
l_to VARCHAR2(64) := '****.****@gmail.com';
l_mail_conn UTL_SMTP.connection;
l_date_debut VARCHAR2(64) := To_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS');
v_cpt number ;
cursor C1 is
select Latable,periodicite,ladate, ladate2, jointure
from histo;
C1r C1%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE ('DEBUT');
OPEN C1;
FETCH C1 INTO C1r;
-- on parcours la table Histo
while C1%FOUND loop
v_requete:='SELECT COUNT(*) FROM '||C1r.Latable||'@bdepkg';
EXECUTE IMMEDIATE v_requete into v_cpt ;
DBMS_OUTPUT.PUT_LINE( To_char( v_cpt ) || ' enregistrements') ;
DBMS_OUTPUT.PUT_LINE(C1r.Latable);
v_table_exception:=C1r.latable;
-- si =0 alors il vient d'avoir une purge donc on ne met rien a jour
if v_cpt>0 then
if C1r.jointure='VBL' then
v_table_exception:=v_table_exception || ' VBL';
v_requete := 'delete from '||C1r.latable||' where chronocd in ( select chronocd from vbl@bdepkg where to_date(dpre,''DD/MM/YY'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''DD/MM/YY''),''DD/MM/YY''))';
EXECUTE IMMEDIATE v_requete;
commit;
v_requete := 'insert into '||C1r.latable||' select * from '||C1r.latable||'@bdepkg where chronocd in ( select chronocd from vbl@bdepkg where to_date(dpre,''DD/MM/YY'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''DD/MM/YY''),''DD/MM/YY''))';
EXECUTE IMMEDIATE v_requete;
commit;
-- jointure par rapport à cart
elsif C1r.jointure='CCART' then
v_table_exception:=v_table_exception || ' CCART';
v_requete := 'delete from '||C1r.latable||' where cart in ( select cart from ccart@bdepkg where to_date(dcart,''YYYY/MM/DD'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''YYYY/MM/DD''),''YYYY/MM/DD''))';
EXECUTE IMMEDIATE v_requete;
commit;
v_requete := ' insert into '||C1r.latable||'
select * from '||C1r.latable||'@bdepkg
where cart in (
select cart
from ccart@bdepkg
where to_date(dcart,''YYYY/MM/DD'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''YYYY/MM/DD''),''YYYY/MM/DD''))';
EXECUTE IMMEDIATE v_requete;
commit;
-- jointure par rapport au lot
elsif C1r.jointure='VLOTS' then
v_table_exception:=v_table_exception || ' VLOTS';
v_requete := ' delete from '||C1r.latable||'
where lot in (
select lot
from vlots@bdepkg
where to_date(dat,''DD/MM/YY'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''DD/MM/YY''),''DD/MM/YY''))';
EXECUTE IMMEDIATE v_requete;
commit;
v_requete := ' insert into '||C1r.latable||'
select * from '||C1r.latable||'@bdepkg
where lot in (
select lot
from vlots@bdepkg
where to_date(dat,''DD/MM/YY'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''DD/MM/YY''),''DD/MM/YY''))';
EXECUTE IMMEDIATE v_requete;
commit;
end if;
if C1r.ladate is not null then
v_table_exception:=v_table_exception || ' date1';
-- on supprime les anciennes saisies
v_requete := 'delete from '|| C1r.Latable ||'
where to_date('|| C1r.ladate ||',''YYYY/MM/DD'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''YYYY/MM/DD''),''YYYY/MM/DD'')';
EXECUTE IMMEDIATE v_requete;
commit;
-- on met à jour BDE Histo
v_requete := 'insert into '|| C1r.Latable ||'
select * from '|| C1r.Latable ||'@bdepkg
where to_date('|| C1r.ladate ||',''YYYY/MM/DD'') > TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''YYYY/MM/DD''),''YYYY/MM/DD'')';
EXECUTE IMMEDIATE v_requete;
commit;
elsif C1r.ladate2 is not null then
v_table_exception:=v_table_exception || ' date2';
-- on supprime les anciennes saisies
v_requete := 'delete from '|| C1r.Latable ||'
where to_date('|| C1r.ladate2 ||',''DD/MM/YY'') < TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''DD/MM/YY''),''DD/MM/YY'')';
EXECUTE IMMEDIATE v_requete;
commit;
-- on met à jour BDE Histo
v_requete := 'insert into '|| C1r.Latable ||'
select * from '|| C1r.Latable ||'@bdepkg
where to_date('|| C1r.ladate2 ||',''DD/MM/YY'') < TO_DATE(TO_CHAR(SYSDATE-'|| C1r.periodicite||',''DD/MM/YY''),''DD/MM/YY'')';
EXECUTE IMMEDIATE v_requete;
commit;
elsif c1r.ladate is null and c1r.ladate2 is null and c1r.jointure is null then
-- on supprime les anciennes saisies
v_table_exception:=v_table_exception || ' NULL';
v_requete := 'TRUNCATE TABLE '||c1r.latable;
EXECUTE IMMEDIATE v_requete;
commit;
-- on met à jour BDE Histo
v_requete := 'insert into '|| C1r.Latable ||' select * from '|| C1r.Latable ||'@bdepkg';
EXECUTE IMMEDIATE v_requete;
commit;
end if;
end if;
FETCH C1 into C1r;
end loop;
-- envoie du mail
l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25);
UTL_SMTP.helo(l_mail_conn, l_mailhost);
UTL_SMTP.mail(l_mail_conn, l_from);
UTL_SMTP.rcpt(l_mail_conn, l_to);
UTL_SMTP.open_data(l_mail_conn);
UTL_SMTP.write_data(l_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || CHR(13));
UTL_SMTP.write_data(l_mail_conn, 'From: ' || l_from || CHR(13));
UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || l_subject || CHR(13));
UTL_SMTP.write_data(l_mail_conn, 'To: ' || l_to || CHR(13));
UTL_SMTP.write_data(l_mail_conn, '' || CHR(13));
-- Multi-line message simulated with a loop calling WRITE_DATA multiple times.
UTL_SMTP.write_data(l_mail_conn, '***********************************************************************************'|| CHR(13));
UTL_SMTP.write_data(l_mail_conn, 'Lancement de la procédure BDE Histo le ' || l_date_debut||' et fini le '||TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS')||CHR(13));
UTL_SMTP.write_data(l_mail_conn, '***********************************************************************************'|| CHR(13));
UTL_SMTP.write_data(l_mail_conn, '' || CHR(13));
UTL_SMTP.close_data(l_mail_conn);
UTL_SMTP.quit(l_mail_conn);
CLOSE C1;
EXCEPTION
WHEN OTHERS THEN
v_error_code := SQLCODE;
v_error_message := SQLERRM;
l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25);
UTL_SMTP.helo(l_mail_conn, l_mailhost);
UTL_SMTP.mail(l_mail_conn, l_from);
UTL_SMTP.rcpt(l_mail_conn, l_to);
UTL_SMTP.open_data(l_mail_conn);
UTL_SMTP.write_data(l_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || CHR(13));
UTL_SMTP.write_data(l_mail_conn, 'From: ' || l_from || CHR(13));
UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || l_subject || CHR(13));
UTL_SMTP.write_data(l_mail_conn, 'To: ' || l_to || CHR(13));
UTL_SMTP.write_data(l_mail_conn, '' || CHR(13));
-- Multi-line message simulated with a loop calling WRITE_DATA multiple times.
UTL_SMTP.write_data(l_mail_conn, 'Lancement de la procédure BDE Histo le ' || l_date_debut|| ' et fini le '||TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS')|| CHR(13));
UTL_SMTP.write_data(l_mail_conn,'ERREUR pendant la procédure : '|| v_error_message ||' au niveau de la table '|| v_table_exception);
UTL_SMTP.write_data(l_mail_conn, '' || CHR(13));
UTL_SMTP.close_data(l_mail_conn);
UTL_SMTP.quit(l_mail_conn);
END; |
Partager