Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на PL/SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PL/SQL

Выпуск № 14
от 07.03.2007, 21:13

Администратор:Евгений Крюков
В рассылке:Подписчиков: 102, Экспертов: 4
В номере:Вопросов: 1, Ответов: 1


Вопрос № 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;


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.45 beta от 20.02.2007
Яндекс Rambler's Top100

В избранное