Вопрос № 76967: В Oracle начиная с 8 действует оператор FORALL
в приложении 2 примера, в первом за одно обращение к базе из соответсвующих 3-х таблиц
добавляются значения в базу
каждая таблица имеет тип соответсвующего столбца,
если же создать табл...
Вопрос № 76.967
В Oracle начиная с 8 действует оператор FORALL
в приложении 2 примера, в первом за одно обращение к базе из соответсвующих 3-х таблиц
добавляются значения в базу
каждая таблица имеет тип соответсвующего столбца,
если же создать таблицу со структурой записи соответсвующей таблицы,
то возникает ошибка, в чем тут загвоздка в примерах таблица dept2
полностью соответсвует известной по многим примерам таблице dept
Приложение:
Отправлен: 27.02.2007, 13:36
Вопрос задал: Shap (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: din
Здравствуйте, Shap!
В данном случае Oracle говорит: "ограничение реализации: невозможно обращение к полям или таблице массовой привязки In записей", говоря человеческим языком это означает - Нельзя обращаться к массиву записей в данном контексте, то есть при использовании оператора FORALL!, а вот к записям массивов можно (каламбур какой-то). Проще говоря объявляем три типа (соответственно количеству столбцов), см. приложение. Код конечно не такой красивый, как в Вашем случае, но Вас же в случае с FORALL
интересует скорость вставки данных (другого смысла в его использовании нет), и врядли Вы будете делать такого рода инициализацию, как в данном примере.
Удачи!
Приложение:
--------- Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Практикант)
Ответ отправлен: 27.02.2007, 22:55 Оценка за ответ: 3 Комментарий оценки: Ответ очевидный. Однако, решение нашел сам. До этого недели 2 не мог.
Очевидная польза от вопросов, обдумаешь как следует вопрос - решение рядом. Вот
; так работает... DECLARE TYPE dept_t IS TABLE OF dept2%ROWTYPE; dept_tab dept_t:=dept_t(); BEGIN dept_tab.EXTEND; dept_tab(1).deptno:=50; dept_tab(1).dname:='Working'; dept_tab(1).loc:='Moscow'; dept_tab.EXTEND; dept_tab(2).deptno:=60; dept_tab(2).dname:='Fishing'; dept_tab(2).loc:='Tula'; dept_tab.EXTEND; dept_tab(3).deptno:=70; dept_tab(3).dname:='Killing'; dept_tab(3).loc:='Kursk'; FORALL
i IN dept_tab.FIRST..dept_tab.LAST INSERT INTO dept2 VALUES dept_tab(i); END;