squirearchy
Дата: 01.03.2007 16:52:59
Мой коллега, утверждает, что если есть процедура PL/SQL, в которой динамически модифицируется структура временной таблицы, например добавляется колонка, либо меняется ее тип (это все происходит динамически), то если к этой процедуре обращаются две сессии; тогда первая сессия например делает select к этой таблице, скажем последние строки кода этой процедуры, а вторая сессия например модифицирует эту же таблицу, скажем первые строки кода этой процедуры и получает отказ, так как первая сессия ее в данный момент читает; Скажите правда ли это и как обойтись по другому. Конечно нужно руки отбивать за DDL в процедурах-отчетах, но просто мой коллега всю карьеру работал с MS, и у него осталась привычка использовать временные таблицы (напомню в мс создается столько копий временных таблиц сколько сессий к ней обращается, и можно модифицировать их, а также строить индексы). Посоветуйте как поступить в данной ситуации, то есть какой объект оракла можно использовать для промежуточного хранения результата, причем структура этого объекта каждый раз перестраивается (динамически в зависимости от вида отчета) и другие сессии, которые его прочитывают не блокирует его модификаций, которые происходят в иных сессиях исполнения этой же процедуры.
orawish
Дата: 01.03.2007 17:09:12
Объясните вашему коллеге, что в оракле его вариант непроходной.
А что вы собственно хотите получить (чисто логически), кроме бардака, перестраивая
структуры объектов, находящихся в немонопольном доступе?
squirearchy
Дата: 01.03.2007 17:23:14
Ну я так понял в прикладной программе клиенте пользователи строят отчеты визуальным путем (drag and drop), манипулируя объектами. Соответственно запускается универсальная процедура, которая имеет динамический DDL, так как объекты разные с разными типами.