j'utilise forms 6i
comment je peux connecter a un utilisateur dans le plsql pour utuliser es donnes dans un autre table
si possible un exemple
Version imprimable
j'utilise forms 6i
comment je peux connecter a un utilisateur dans le plsql pour utuliser es donnes dans un autre table
si possible un exemple
Le package Forms EXEC_SQL permet de se connecter à un autre utilisateur. Je ne sais, par contre s'il est disponible avec la version 6i et je n'ai pas d'exemple tout fait non plus.
Voici un exemple trouvé sur Metalink.
Cet exemple connecte sur 2 bases distinctes, mais la connexion dans la même base sur 2 users relève du même raisonnement
Code:
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 declare empno NUMBER; ename VARCHAR2(10); deptno NUMBER; source_connid EXEC_SQL.ConnType; destination_connid EXEC_SQL.ConnType; source_cursor EXEC_SQL.CursType; destination_cursor EXEC_SQL.CursType; dummy PLS_INTEGER; begin -- open the connections source_connid := EXEC_SQL.OPEN_CONNECTION(:source_db); destination_connid := EXEC_SQL.OPEN_CONNECTION(:dest_db); -- prepare the cursor to select from source database source_cursor := EXEC_SQL.OPEN_CURSOR(source_connid); EXEC_SQL.PARSE(source_connid, source_cursor,'SELECT empno, ename,deptno FROM ' ||:source_tab); EXEC_SQL.DEFINE_COLUMN(source_connid, source_cursor,1,empno); EXEC_SQL.DEFINE_COLUMN(source_connid, source_cursor,2,ename,10); EXEC_SQL.DEFINE_COLUMN(source_connid, source_cursor,3,deptno); dummy := EXEC_SQL.EXECUTE(source_connid,source_cursor); -- prepare the cursor to insert into destination database destination_cursor := EXEC_SQL.OPEN_CURSOR(destination_connid); EXEC_SQL.PARSE(destination_connid,destination_cursor,'INSERT INTO ' ||:dest_tab || '(empno,ename,deptno) VALUES (:empno,:ename,:deptno)'); LOOP -- fetch rows from source database IF EXEC_SQL.FETCH_ROWS(source_connid,source_cursor) > 0 THEN -- get column values for this row EXEC_SQL.COLUMN_VALUE(source_connid,source_cursor,1, empno); EXEC_SQL.COLUMN_VALUE(source_connid,source_cursor,2, ename); EXEC_SQL.COLUMN_VALUE(source_connid,source_cursor,3, deptno); -- bind the column values into the cursor that inserts into destination database EXEC_SQL.BIND_VARIABLE(destination_connid,destination_cursor, ':empno', empno); EXEC_SQL.BIND_VARIABLE(destination_connid,destination_cursor, ':ename', ename); EXEC_SQL.BIND_VARIABLE(destination_connid,destination_cursor, ':deptno', deptno); dummy := EXEC_SQL.EXECUTE(destination_connid,destination_cursor); ELSE EXIT; END IF; END LOOP; -- commit transaction in destination database EXEC_SQL.PARSE(destination_connid,destination_cursor,'commit'); dummy := EXEC_SQL.EXECUTE(destination_connid,destination_cursor); -- close cursors and connections EXEC_SQL.CLOSE_CURSOR(destination_connid,destination_cursor); EXEC_SQL.CLOSE_CURSOR(source_connid, source_cursor); EXEC_SQL.CLOSE_CONNECTION(destination_connid); EXEC_SQL.CLOSE_CONNECTION(source_connid); MESSAGE('Done!'); EXCEPTION -- handle errors raised by the exec_sql package WHEN EXEC_SQL.PACKAGE_ERROR THEN IF EXEC_SQL.LAST_ERROR_CODE(source_connid) != 0 THEN TEXT_IO.PUT_LINE('ERROR (source: ' || TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(source_connid))|| '): ' ||EXEC_SQL.LAST_ERROR_MESG(source_connid)); END IF; IF EXEC_SQL.LAST_ERROR_CODE(destination_connid) != 0 THEN TEXT_IO.PUT_LINE('ERROR (destination: ' || TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(destination_connid))|| '): ' ||EXEC_SQL.LAST_ERROR_MESG(destination_connid)); END IF; IF EXEC_SQL.IS_CONNECTED(destination_connid) THEN IF EXEC_SQL.IS_OPEN(destination_connid,destination_cursor) THEN EXEC_SQL.CLOSE_CURSOR(destination_connid,destination_cursor); END IF; EXEC_SQL.CLOSE_CONNECTION(destination_connid); END IF; IF EXEC_SQL.IS_CONNECTED(source_connid) THEN IF EXEC_SQL.IS_OPEN(source_connid,source_cursor) THEN EXEC_SQL.CLOSE_CURSOR(source_connid,source_cursor); END IF; EXEC_SQL.CLOSE_CONNECTION(source_connid); END IF; END;