| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > НЕ DML инструкции в процедурах и функциях |
| Автор: BIZ0N 8.6.2006, 20:37 | ||||
| Субд Oracle 9i или Oracle 10g XE Release 10.2.0.1.0 Как реализовать нечто подобное вот этому:
P.S.: Заранее спасибо!!! |
| Автор: Sqlninja 8.6.2006, 22:20 | ||
|
| Автор: batigoal 9.6.2006, 08:53 |
| Кстати, а я вроде слышал, что EXECUTE IMMEDIATE не следует злоупотреблять. Из-за чего? Из соображений производительности, или целостности, или еще каких-то?.. |
| Автор: Sqlninja 9.6.2006, 10:57 |
| Динамический SQL - это в общем не есть хорошо, но он имеет и свои преймущества. Основные недостатки - это невозможность проверки на этапе компиляции и, как правило, худшая производительность. Кстати, EXECUTE IMMEDIATE это еще ничего, в ранних версиях был только тормозной пакет DMBS_SQL. Общее правило таково, что динамический SQL следует использовать лишь тогда когда невозможно обойтись статическим, как например в этом случае. А также: - при выполнении DDL операторов в PL\SQL - при ссылках на объекты не существующие на этапе компиляции - при выполнении динамических запросов или блоков - при динамических операциях с правами вызывающего Кажется, все. |
| Автор: batigoal 9.6.2006, 11:03 |
| Ясно, спасибо |
| Автор: chief39 13.9.2006, 19:39 | ||||||||||||
| Осмелюсь поднять старую тему, дабы избежать криков "поиск рулит!!" Возникло подозрение, что DDL через execute immediate нельзя выполнять... Но раз уж в топике так написано.... Делюсь тем, что есть: Выполняю из консоли тоада
Сервер пишет:
Всё ок. Но надо динамически... И тут валится в самом простом кейсе: вот так:
вот так:
В том числе и если не писать ";" в самом стринге запроса. оракл - 10.1.0 Голова не варит совершенно, посему очень полагаюсь на помощь |
| Автор: LSD 13.9.2006, 20:13 | ||
Ты чегой-то перемудрил в процедуре.
нормально отрабатывает, только не надо забывать про то что привилегию create user надо выдать явно, а не через роль. |
| Автор: chief39 14.9.2006, 12:52 | ||||
| ЗЫ: не совсем в тему, но... Инициализация таблиц согласно мануалам должна проходить вот так:
Но...
Подумалось - а вдруг фигурные? - но, фик. Если поэлементно инициализировать потом - один елемент пролеает - при переборе ругается Добавлено @ 13:06 В принципе сделал, но вопросы всё равно для меня интересные Да простят меня "оракулы", по после сибейса очччень неудобная штука |
| Автор: LSD 14.9.2006, 13:23 | ||||||
Зачем тебе в скрипте понадобилось execute immediate? Там же и без этого можно выполнять операторы DDL? Да и как анонимный PL/SQL блок
оно отрабатывает нормально.
Не понял, поподробней в чем проблема?
Тссс! Не шуми, а то сюда сейчас вся "Фабрика звезд" нагрянет |
| Автор: chief39 14.9.2006, 13:37 | ||
Создаётся много схем. Названия формируются динамически. У меня валится Ну... в коде есть. Пытаюсь создать и сразу проинициализировать список. Но валится Эттто ещё кто??? |
| Автор: LSD 14.9.2006, 13:51 | ||
Мой тестовый пример, или твой?
Прям в секции объявления Так нельзя. В секции объявления, переменные только объявляются, иниализация в блоке кода. Страшные люди, умеют своим пением сводить людей с ума: люди начинают биться головой о стену, у них начинаются приступы тошноты и беспричинной агресси. |
| Автор: chief39 14.9.2006, 14:21 | ||||||
Блин... если бегин-эндом обрамить - пашет С меня пиво
А вот http://www.psoug.org/reference/collections.html говорили что можно
Я и поверил было...
Это из какого-то анека? Или фэнтези? Что за фабрика звёзд? |
| Автор: LSD 14.9.2006, 14:45 |
Ээээ, ты туда не читай, ты http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collections.htm#sthref1042 читай, а то савсэм обманут будешь Неа, черное (Гиннес) Счастливый человек, не знает что такое http://www.1tv.ru/fabrika/ (на МузТВ очень интересный факт показали, рядом с Фабрикой Звезд находится завод по производству слуховых аппаратов |
| Автор: chief39 14.9.2006, 15:24 | ||||
Ок ;) Приезжай
Мдя |
| Автор: LSD 14.9.2006, 17:08 | ||||
Ты сегодня в ударе Если тебе надо создать ассоциативный массив, то делай это так:
Если просто вложеную таблицу:
|
| Автор: chief39 14.9.2006, 17:52 |
Так и делаю. Но при переборе от 1 до COUNT на пропущенных элементах ругается Дык я ведь такой же кусок кода привёл вроде.... (хотя в оракле я уже ни в чём не уверен И он валится как я написал выше |
| Автор: LSD 14.9.2006, 18:12 |
Нет не такой же, у тебя тип объявлен как ассоциативный массив, а инициализируешь ты его как простую вложенную таблицу. Завтра гляну (домой пора: сегодня пиво и блюз |
| Автор: LSD 15.9.2006, 11:42 | ||
| Курение мануалов дало следующий результат Итерацию по ассоциативным массивам надо делать так:
|
| Автор: chief39 15.9.2006, 14:30 | ||
Спасиб Переделаю, как вернусь из Карпат С меня оба пива |
| Автор: chief39 15.9.2006, 15:49 |
| Всё. Сделал как таблицу Ну ййяво нафик Теперь душа чиста. Спасибки |
| Автор: LSD 15.9.2006, 23:28 |
Афигеть, он еще в горах катется Пожалуйста |
| Автор: chief39 19.9.2006, 11:45 |
Я не катаюсь, я пьянствую. Во флейме написал. Вот http://forum.vingrad.ru/index.php?act=ST&f=193&t=112531&st=0#entry859202 |