ошибка ORA-30512

GrandMaster
Дата: 27.05.2006 20:53:38
При выполнении в тригере PL SQL кода
  execute immediate 'drop table t';  
  execute immediate 'create global temporary table t preserve rows as select * from main where 0=1';     

выдает ошибку ORA-30512, как обойти?
andrey_anonymous
Дата: 27.05.2006 21:11:56
GrandMaster
При выполнении в тригере PL SQL кода
  execute immediate 'drop table t';  
  execute immediate 'create global temporary table t preserve rows as select * from main where 0=1';     
выдает ошибку ORA-30512, как обойти?

Ознакомиться с FAQ и убрать этот код вообще.
GrandMaster
Дата: 27.05.2006 21:35:38
Там совсем другой случай рассмотрен.
Сами по себе обе команды в SQL у меня выполняеться
drop table;  
execute immediate 'create global temporary table t preserve rows as select * from main where 0=1;

в PL SQL уже нет.
GrandMaster
Дата: 27.05.2006 21:36:55
Там совсем другой случай рассмотрен.
Сами по себе обе команды в SQL у меня выполняеться
drop table;  
create global temporary table t preserve rows as select * from main where 0=1;

в PL SQL уже нет.
andrey_anonymous
Дата: 27.05.2006 21:41:16
GrandMaster
Там совсем другой случай рассмотрен.

Никакой не "другой". Ваш собственный.
Пересоздавать временную таблицу из пакета - неправильно.
Ошибку побороть можно, но проблема не в ней.
dmidek
Дата: 28.05.2006 00:02:26
Этот сабж - это вообще какое то сборище нелепостей.
Во первых, всецело поддерживаю andrey_anonymous. Это совершенно недопустимый дизайн в Oracle. Все таблицы необходимо создавать на стадии проектирования, а не в runtime. Это не MS SQL.
Но это так сказать вещи идеологические.

GrandMaster

Сами по себе обе команды в SQL у меня выполняеться
drop table t ; 
execute immediate 'create global temporary table t preserve rows as select * from main where 0=1;


Позвольте не поверить . В create table синтаксическая ошибка.
Ознакомьтесь внимательно с синтаксической диаграммой

CREATE TEMPORARY TABLE

А если исправите эту ошибку, то в триггере немедленно возникнет новая ошибка

ORA-04092: cannot COMMIT in a trigger

Откуда берется ORA-30512 я не понимаю.
Вы что , Queue Table используете ?

В общем положите временную таблицу заранее, исправив ошибки , уберите триггер и забудьте об этом , как о страшном сне :)
andrey_anonymous
Дата: 28.05.2006 00:34:08
dmidek
А если исправите эту ошибку, то в триггере немедленно возникнет новая ошибка
ORA-04092: cannot COMMIT in a trigger
Откуда берется ORA-30512 я не понимаю.

Oracle9i Database Error Messages
ORA-30512 cannot modify string.string more than once in a transaction
This error is usually caused by a DDL statement that fires a system trigger that tries to modify the same object
Action: Do not create system triggers that might modify an already modified object...
dmidek
Дата: 28.05.2006 00:42:30
andrey_anonymous
dmidek
А если исправите эту ошибку, то в триггере немедленно возникнет новая ошибка
ORA-04092: cannot COMMIT in a trigger
Откуда берется ORA-30512 я не понимаю.

Oracle9i Database Error Messages
ORA-30512 cannot modify string.string more than once in a transaction
This error is usually caused by a DDL statement that fires a system trigger that tries to modify the same object
Action: Do not create system triggers that might modify an already modified object...


Я тоже прочел сообщение об ошибке.
И где это все у автора ?
andrey_anonymous
Дата: 28.05.2006 00:49:11
автор
Я тоже прочел сообщение об ошибке.
И где это все у автора ?

Читаем:
GrandMaster
При выполнении в тригере

В триггере...
GrandMaster
execute immediate 'drop table t';

DDL...
GrandMaster
выдает ошибку ORA-30512

... а не ORA-04092

Следовательно - Queue tables ни при чем, речь о системном триггере.
andrey_anonymous
Дата: 28.05.2006 00:55:15
2GrangMaser: Вы задачу опишите.
Одну я с грехом пополам придумал (обеспечить идентичность структур t и main в случае изменения последней), но ИМХО средство выбрано не самое удачное.