Create table dans une loop PL/SQL
Bonjour,
Je suis en train de faire un script sql pour dupliquer une base via un DBlink en utilisant
Code:
create table *** as select * from tablesource@dblink
en gros voilà à quoi ça ressemble :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| DECLARE
TYPE LISTE_TABLES IS TABLE OF NVARCHAR2(30);
ma_liste_table LISTE_TABLES;
requete NVARCHAR2(255);
begin
select TABLE_NAME BULK COLLECT INTO ma_liste_table from ALL_ALL_TABLES@SYNCHRO2 where OWNER='SYNOPTIS2';
For i IN ma_liste_table.first..ma_liste_table.last Loop
IF ma_liste_table(i)= 'TRONC' then
dbms_output.put_line('CREATE TABLE SYNOPTIS.'||ma_liste_table(i)||' as select * from SYNOPTIS2.'||ma_liste_table(i)||'@SYNCHRO2');
execute immediate 'CREATE TABLE SYNOPTIS.'||ma_liste_table(i)||' as select * from SYNOPTIS2.'||ma_liste_table(i)||'@SYNCHRO2';
end if;
End loop;
end; |
SYNOPTIS = schema de destination.
SYNOPTIS2 = schéma source
SYNCHRO2 = dblink vers la database source
le tout est excécuté sur la base de destination.
la ligne retournée par dbms_output.put_line est :
Code:
CREATE TABLE SYNOPTIS.TRONC as select * from SYNOPTIS2.TRONC@SYNCHRO2
cette commande s'exécute parfaitement sous SQLplus. Mais dés que j'intègre ça dans un execute immediate et une boucle la requête ne passe plus :
Citation:
Error report:
ORA-00900: instruction SQL non valide
ORA-06512: ligne 11
00900. 00000 - "invalid SQL statement"
*Cause:
*Action:
Une idée ?
:merci: