powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
7 сообщений из 7, страница 1 из 1
Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
    #36988365
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

Есть таблица родитель PRNTTAB (PRNTID integer generated always as identity, FLD1, FLD2, ...) и дочерняя таблица CHLDTAB (CHLDID, PRNTID ...). Создал такую View
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create view V_PRNTCHLD 
as 
select chld_.CHLDID,
       prnt_.PRNTID,   
       prnt_.FLD1,
       prnt_.FLD2
from CHLDTAB as chld_
left join PRNTTAB as prnt_
on chld_.PRNTID=prnt_.PRNTID@

При операции вставки записи в V_PRNTCHLD (делал это в Центре управления) вылетает ошибка:
Код: plaintext
1.
2.
3.
4.
SQL0150N Полная выборка, производная таблица, типизированная таблица, 
материализованная таблица запроса или промежуточная таблица 
назначения в операторе INSERT, DELETE, UPDATE или MERGE - это 
объект назначения, для которого запрошенная операция не 
разрешена.  SQLSTATE=42807

Почитал об этой ошибке, но ничего не понял. В чем проблема?

С уважением, Семен Попов
...
Рейтинг: 0 / 0
Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
    #36988772
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

C:\>db2 ? SQL0150N
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL0150N  The target fullselect, view, typed table, materialized query
      table, or staging table in the INSERT, DELETE, UPDATE, or MERGE
      statement is a target for which the requested operation is not
      permitted.

Explanation:

The fullselect, view, typed table, materialized query table, or staging
table named in the INSERT, UPDATE, DELETE, or MERGE statement is defined
so that the requested insert, update, or delete operation cannot be
performed.

 A view or a fullselect is read only if the SELECT statement of the view
or the fullselect contains any of the following: 
*  A DISTINCT keyword
*  A column function in the select list
*  A GROUP BY or HAVING clause
*   A FROM clause that identifies one of the following:
   *  More than one table or view 
   *  A read-only view (READONLY column of SYSCAT.VIEWS is set to 'Y')

*  A set operator (other then UNION ALL).
*  Federated system users: a data source specific limitation that causes
   the view not to be updatable
...
Надо создать INSTEAD OF INSERT триггер на V_PRNTCHLD.
...
Рейтинг: 0 / 0
Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
    #36989012
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinЗдравствуйте.

+
C:\>db2 ? SQL0150N
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL0150N  The target fullselect, view, typed table, materialized query
      table, or staging table in the INSERT, DELETE, UPDATE, or MERGE
      statement is a target for which the requested operation is not
      permitted.

Explanation:

The fullselect, view, typed table, materialized query table, or staging
table named in the INSERT, UPDATE, DELETE, or MERGE statement is defined
so that the requested insert, update, or delete operation cannot be
performed.

 A view or a fullselect is read only if the SELECT statement of the view
or the fullselect contains any of the following: 
*  A DISTINCT keyword
*  A column function in the select list
*  A GROUP BY or HAVING clause
*   A FROM clause that identifies one of the following:
   *  More than one table or view 
   *  A read-only view (READONLY column of SYSCAT.VIEWS is set to 'Y')

*  A set operator (other then UNION ALL).
*  Federated system users: a data source specific limitation that causes
   the view not to be updatable
...
Надо создать INSTEAD OF INSERT триггер на V_PRNTCHLD.Спасибо. Уже стал догадываться, что проблема кроется в "from CHLDTAB as chld_
left join PRNTTAB as prnt_" (селект из двух таблиц). Я правильно понял, что редактировать вьюху нескольких таблиц я смогу только в том случае, если заложу в "INSTEAD OF"-триггеры логику добавления, изменения и удаления используемых таблиц?
...
Рейтинг: 0 / 0
Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
    #36989033
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Semen PopovЯ правильно понял, что редактировать вьюху нескольких таблиц я смогу только в том случае, если заложу в "INSTEAD OF"-триггеры логику добавления, изменения и удаления используемых таблиц?Да.
...
Рейтинг: 0 / 0
Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
    #36989252
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein, спасибо. Что-то не получается создать триггер INSTEAD OF на мою вью.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create trigger INSERT_PRNTCHLD
instead of insert on V_PRNTCHLD
referencing new as n
for each row mode DB2SQL
begin atomic
 set n.PRNTID=(select SYSIBM.IDENTITY_VAL_LOCAL() from PRNTTAB);
 insert into PRNTTAB (FLD1,FLD2,...) values (n.FLD1,n.FLD2,...);
 insert into CHLDTAB (,PRNTID,...) values (...,n.PRNTID);
end
@
Выдает туже самую ошибку SQL0150N.
...
Рейтинг: 0 / 0
Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
    #36989448
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
create table PRNTTAB (
  PRNTID integer not null generated always as identity
, FLD1 int, FLD2 int
, constraint PRNTTAB_PK primary key (PRNTID)
) in userspace1@

create table CHLDTAB (
  CHLDID integer not null generated always as identity
, PRNTID int not null
, FLD1 int
, constraint CHLDTAB_FK foreign key (PRNTID) references PRNTTAB (PRNTID)
) in userspace1@

create view V_PRNTCHLD 
as 
select chld_.CHLDID,
       chld_.FLD1 FLD1_C,
       prnt_.PRNTID,   
       prnt_.FLD1,
       prnt_.FLD2
from CHLDTAB as chld_
left join PRNTTAB as prnt_
on chld_.PRNTID=prnt_.PRNTID
@

create trigger INSERT_PRNTCHLD
instead of insert on V_PRNTCHLD
referencing new as n
for each row mode DB2SQL
begin atomic
 declare l_prntid int;
 set l_prntid = (select prntid from new table (insert into PRNTTAB(FLD1, FLD2) values (n.FLD1, n.FLD2)));
 insert into CHLDTAB (PRNTID, FLD1) values (l_prntid, n.FLD1_C);
end
@

insert into V_PRNTCHLD (FLD1_C, FLD1, FLD2) values ( 1 ,  2 ,  3 )@
...
Рейтинг: 0 / 0
Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
    #36989484
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein, наверно тут одним спасибо точно не отделаюсь. Огромное спасибо! Есть же на свете добрые люди!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Ошибка при операции INSERT, DELETE, UPDATE над объектом VIEW
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]