Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 select сразу после insert  [new]
ora_new
Member

Откуда:
Сообщений: 2
Здравствуйте.

Необходимо в одной транзакции выполнить select сразу после insert.
При этом, select нужно сделать из вьюшки, сформированной по таблице, в которую происходит insert.
Т.е. (утрированно)
create table t$my_table
as select 1 id, 'x' code from dual;

create view v$my_view
as select id, code from t$my_table;   

create or replace procedure p$my_proc is
   my_Id number;
begin
   insert into t$my_table (id, code)
   values (111, 'aaa');

   select id into my_Id 
   from v$my_view
   where id = 111;
end p$my_proc;
Данный подход выдаёт ошибку о невозможности выбрать данные, поскольку они не существуют (не найдены).
Что можно в этом случае придумать? Подскажите, пожалуйста.
Я так понимаю, что сыр-бор как раз из-за вьюшки, в которой собрано много другой информации, поскольку в вышеприведенном примере вроде всё работает.

Сразу поясню, мне нужен именно такой подход, с использованием одной транзакции (без commit/rollback), поскольку это кусок большого сегмента кода чужой программы, и, если произойдет ошибка во время выполнения следущих действий (или пользователь просто отменит свои действия), необходимо будет откатиться к самому началу. А commit будет возможен еще нескоро. Опять же select из вьюшки необходим, поскольку во вьюшке собраны данные из других таблиц, а также выполнены многие приведения.

Заранее спасибо.
16 ноя 06, 06:29    [3406899]     Ответить | Цитировать Сообщить модератору
 Re: select сразу после insert  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1635
Выложите:
desc t$my_table
И листинг ошибок после запуска процедуры
16 ноя 06, 06:36    [3406902]     Ответить | Цитировать Сообщить модератору
 Re: select сразу после insert  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Commit/Rollback тут не причем
Скорее всего у тебя в представлении используется соединение таблиц (причем внутреннее, без плюсиков) и для вставленной тобой строки не находится подходящей строки в связанных таблицах
16 ноя 06, 06:37    [3406903]     Ответить | Цитировать Сообщить модератору
 Re: select сразу после insert  [new]
ora_new
Member

Откуда:
Сообщений: 2
desc для исходной таблицы неважен, там только number и varchar (аналогично t$my_table).
Видимо таки дело во вьюшке и в отупении меня :)
Ошибка выдается ORA-01403: данные не найдены.

Насчет соединения таблиц.
Плюсиков действительно нет, но в отсутствие данных слабо верится, поскольку в исходной процедуре я сначала добавляю запись в основную таблицу, а затем много записей в "проблемную" таблицу, с foreign_key на основную.
И затем хочется получить собственно только что добавленные данные, соединённые вьюшкой между собой.
А не выходит каменный цветок.
16 ноя 06, 07:00    [3406927]     Ответить | Цитировать Сообщить модератору
 Re: select сразу после insert  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Простой примерчик -- проверь, что во все связанные таблицы добавлены соответствующие данные
tst> create table t1(id1 number, val1 varchar2(10));

Table created.

tst> create table t2(id2 number, val2 varchar2(10));

Table created.

tst> create view v1 as select id1, val1, val2 from t1, t2 where id1=id2;

View created.

tst> insert into t1 values(1, 'One');

1 row created.

tst> select * from v1;

no rows selected

tst> insert into t2 values(1, 'Two');

1 row created.

tst> select * from v1;

       ID1 VAL1       VAL2
---------- ---------- ----------
         1 One        Two
16 ноя 06, 07:04    [3406932]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить