j'ai créé une procédure stockée qui permet d'envoyer les données d'une base de données source vers une base de données destination avec un lien entre les 2 bases de données

voila ce que je fais Mais ça ne fonctionne pas

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
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
CREATE OR REPLACE PROCEDURE archivage ( source IN VARCHAR2, destination IN VARCHAR2) 
IS 
source_cursor INTEGER; 
destination_cursor INTEGER ; 
ignorer INTEGER;
i integer;
 
BEGIN 
 
/* - Préparer un curseur pour sélectionner à partir de la bd_source: */
source_cursor: = dbms_sql.open_cursor; 
DBMS_SQL.PARSE (source_cursor, 
'SELECT table_name FROM dba_tables' | | source,DBMS_SQL.NATIVE);
LOOP i in source_cursor
/* soit j'utilise cette req 
SELECT object_name FROM dba_objects WHERE owner = 'SCOTT' AND object_type = 'TABLE'*/
DBMS_SQL.DEFINE_COLUMN (source_cursor, i); 
end loop
ignorer: DBMS_SQL.EXECUTE = (source_cursor); 
/* - Préparer un curseur à insérer dans la bd de destination: */
destination_cursor: = DBMS_SQL.OPEN_CURSOR; 
DBMS_SQL.PARSE (destination_cursor, 
'INSERT INTO' | | destination | | DBMS_SQL.NATIVE); 
/* - Récupère une ligne de la table source et l'insérer dans la table de destination: */
loop
if DBMS_SQL.FETCH_ROWS (source_cursor)> 0 ALORS 
- Obtenir des valeurs de colonne de la ligne 
DBMS_SQL.COLUMN_VALUE (source_cursor,i); 
DBMS_SQL.BIND_VARIABLE (destination_cursor,i); 
 
ignorer: DBMS_SQL.EXECUTE = (destination_cursor); 
ELSE 
 
EXIT; 
End If; 
END LOOP; 
/*-fermer les curseurs: */
COMMIT; 
DBMS_SQL.CLOSE_CURSOR (source_cursor); 
DBMS_SQL.CLOSE_CURSOR (destination_cursor); 
EXCEPTION 
WHEN OTHERS, THEN
if
DBMS_SQL.IS_OPEN (source_cursor)then
DBMS_SQL.CLOSE_CURSOR (source_cursor); 
End If; 
if DBMS_SQL.IS_OPEN (destination_cursor) then 
DBMS_SQL.CLOSE_CURSOR (destination_cursor); 
End If; 
RAISE; 
END;