Ich habe das folgende Code-Snippet, um Zeilen in t1-Tabelle einzufügen, aber wenn ich die Prozedur ausführen, werden keine Zeilen in t1-Tabelle aufgefüllt.FORALL INSERT Keine Zeilen einfügen
CREATE OR REPLACE PROCEDURE my_proc
IS
TYPE rt_t1 IS TABLE OF t1%ROWTYPE
INDEX BY BINARY_INTEGER;
vrt_t1 rt_t1;
TYPE t_emp_no_list IS TABLE OF t1.emp_no%TYPE
INDEX BY BINARY_INTEGER;
TYPE t_emp_name_list IS TABLE OF t1.emp_name%TYPE
INDEX BY BINARY_INTEGER;
TYPE t_loc_name_list IS TABLE OF t1.loc_name%TYPE
INDEX BY BINARY_INTEGER;
TYPE t_hire_date_list IS TABLE OF t1.hire_date%TYPE
INDEX BY BINARY_INTEGER;
l_emp_no t_emp_no_list;
l_emp_name t_emp_name_list;
l_loc_name t_loc_name_list;
l_hire_date t_hire_date_list;
BEGIN
SELECT empno,
ename,
loc,
hiredate
BULK COLLECT INTO l_emp_no,
l_emp_name,
l_loc_name,
l_hire_date
FROM (SELECT empno,
ename,
dept.loc,
emp.hiredate
FROM emp JOIN dept ON emp.deptno = dept.deptno);
FORALL i IN vrt_t1.FIRST .. vrt_t1.LAST
INSERT INTO t1 (emp_no,
emp_name,
loc_name,
hire_date)
VALUES (l_emp_no (i),
l_emp_name (i),
l_loc_name (i),
l_hire_date (i));
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
END;
Sie sind Bulk-Sammel in l_emp_no wenn über vrt_t1 laufen. Nicht gut. – arturro
Wie Sie gesagt haben, füllen Sie nicht alle Spalten Ihrer Zieltabelle..Wenn Sie die 'vrt_t1' verwendet haben, hat sie alle Spalten der Tabelle t1 geerbt. und während des Einfügens wäre es gescheitert – XING
Überprüfen Sie meine Bearbeitung .. Es funktioniert und getestet. – XING