Bonjour,
j'ai un problème avec une procédure qui s'exécute sans retour d'erreurs mais qui en fait ne fait rien ...

Il s'agit de cette procédure :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
CREATE OR REPLACE PROCEDURE Script_chargement_ODS_1Bis IS
 
CURSOR c_table IS
SELECT vsource.view_name, tcible.table_name
FROM SYS.ALL_TABLES tcible,  SYS.ALL_VIEWS vsource
WHERE tcible.OWNER = 'IHR'  and vsource.OWNER = 'IHR'
and tcible.table_name like 'HRA_%' and tcible.table_name not like 'HRA_ZX%'
and tcible.table_name not like 'HRA_ZY%' and vsource.view_name like 'ODS_%'
and vsource.view_name not like 'ODS_ZX%' and vsource.view_name not like 'ODS_ZY%'
and rtrim(substr(tcible.table_name,4,25)) = rtrim(substr(vsource.view_name,4,25))
and tcible.table_name  not in (SELECT substr ( tcible.table_name , 1 , INSTR(tcible.table_name,'TMP',1) - 2 )
					   	   	   FROM SYS.ALL_TABLES tcible
							   WHERE tcible.table_name like 'HRA_%'
							   AND tcible.table_name  like '%TMP') ;
i c_table%ROWTYPE;
 
BEGIN
 
FOR i IN c_table LOOP
	EXECUTE IMMEDIATE 'truncate table IHR.' || i.table_name ;
	EXECUTE IMMEDIATE 'Insert into IHR.' || i.table_name || ' select * from IHR.' || i.view_name ;
	commit;
END LOOP;
 
END;
Son but est tout simple, copier les données des vues dans des tables correspondantes ! La procédure est sur un schéma (SUNOPSIS) et les données cible/source sont sur un autre schéma (IHR).

Lorsque je l'exécute cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
begin
SUNOPSIS.Script_chargement_ODS_1Bis() ;
end ;
J'ai ce retour : PL/SQL procedure successfully completed

Or mes tables cibles restent vides ! (alors qu'il y a bien des données dans les vues sources)

Comme autre test, j'ai exécuter la requête de mon curseur pour voir si le problème ne venait pas de là mais il me retourne bien les noms des tables et vues ... Je décide alors de copie la première occurrence de cette liste :
View name : ODS_FNB00_ALL
Table name : HRA_FNB00_ALL
Et je remplace dans les EXECUTE IMMEDIATE pour ensuite essayer cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
BEGIN
 
EXECUTE IMMEDIATE 'truncate table IHR.HRA_FNB00_ALL' ;
EXECUTE IMMEDIATE 'Insert into IHR.HRA_FNB00_ALL select * from IHR.ODS_FNB00_ALL' ;
commit;
 
END;
Et lorsque je fais cela, même code de retour, cette fois-ci avec la table cible qui est correctement remplie !!!

Je ne m'explique vraiment pas le problème que j'ai avec la procédure qui n'exécute rien ....

HELP ME PLEASE !!!!!