powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / forms и updatable view
11 сообщений из 11, страница 1 из 1
forms и updatable view
    #32710532
sataneyeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В forms хочу сделать data block на основе обновляемого представления с instead of триггером. Все хорошо только не хочет обновляться. Пробовал различные значения для Key Mode, Locked Mode, Update Changed Column Only, Enforce Primary Key. Установил первичные поля Id и Worker_Id. Не хочет обновляться - пишет FRM-40501: Ошибка ORACLE: невозможно зарезервировать запись для обновления или удаления. В sqlplus обновление этого представления работает.
Что сделать чтобы в forms это тоже заработало?

Представление - q_day_worker
WHERE Clause - MONTH = :MONTH_LIST AND WORKER_ID = :WORKER_LIST
ORDER BY Clause - ID
Код: 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.
37.
38.
39.
40.
41.
42.
CREATE OR REPLACE VIEW q_day_worker (
   id,
   month,
   worker_id,
   client_hours,
   client_id )
AS
SELECT d.id, TO_CHAR (TRUNC (d.id, 'mm'), 'MON YYYY') MONTH, d.worker_id,
       w.client_hours, w.client_id
  FROM (select q.id, wk.id worker_id from ts_day q, ts_worker wk) d
        left join ts_day_worker w 
        on d.id = w.day_id and d.worker_id = w.worker_id;
/


 -- Triggers for Q_DAY_WORKER 

CREATE OR REPLACE TRIGGER day_worker_iou_tr
INSTEAD OF UPDATE 
ON q_day_worker
REFERENCING NEW AS NEW OLD AS OLD
BEGIN
  -- some code 
 null;
END;
/

CREATE TABLE ts_day
    (id                             DATE NOT NULL);
/

CREATE TABLE ts_worker
    (id                             NUMBER NOT NULL,
    name                           VARCHAR2( 50 ) NOT NULL);
/

CREATE TABLE ts_day_worker
    (day_id                         DATE NOT NULL,
    worker_id                      NUMBER NOT NULL,
    client_hours                  NUMBER,
    client_id                     NUMBER);
/
...
Рейтинг: 0 / 0
forms и updatable view
    #32712051
ten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Я в этом случае делал обновляемые поля небазовыми, при сохраненнии изменений запускал напрямую update TABLE set field = ..., после чего перечитывал блок.
...
Рейтинг: 0 / 0
forms и updatable view
    #32712178
Димитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
forms и updatable view
    #32712271
Ambitzia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос:а какие данные в этом блоке нужно изменять? здесь можно менять только два поля key-preserved table - id и worker_id.
...
Рейтинг: 0 / 0
forms и updatable view
    #32712299
Димитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ambitziaа какие данные в этом блоке нужно изменять? здесь можно менять только два поля key-preserved table - id и worker_id.

Будут изменяться только те поля, которые обрабатываются в instance триггере. Причем изменения должны быть правильно преобразованы в изменения таблиц, на основе которых формируется представление.

Иначе выглядеть будет что изменения теряются после commit.

Во всем остальном работа как с таблицой - разрешения на изменения полей блока свойствами в design-time или runtime.
...
Рейтинг: 0 / 0
forms и updatable view
    #32712311
sataneyeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на on-lock триггер повесил свою процедуру и все заработало:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare
	id date;
begin
	select day_id
	into id
	from ts_day_worker
	where day_id = :DAY.ID and worker_id = :WORKER_ID
	for update nowait;
exception
	when no_data_found then null;
end;
...
Рейтинг: 0 / 0
forms и updatable view
    #32712343
Ambitzia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я хотела сказать, что может вообще без инстед триггеров обойтись, если изменения только основной таблицы касаются.
А on-lock возьму на заметку, а то в свое время такая же проблема была.
...
Рейтинг: 0 / 0
forms и updatable view
    #32712413
Димитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ambitziaя хотела сказать, что может вообще без инстед триггеров обойтись, если изменения только основной таблицы касаются.
Думаю что такой подход при разработке ПО значительно труднее в соправождении.
А вдруг нужно туже функциональность включить в другую форму.
А вдруг что-то надо изменить.
Уже в двух местах менять -- вероятность ошибку значительно возростает.
А так поменял на сервере раз отладил и спишь спокойно до очередного изменения постановки задачи.
Ambitzia
А on-lock возьму на заметку, а то в свое время такая же проблема была.
Мне тоже понравилось. Только это должно быть встроенно в Forms, а не работает.
Может нужно делать view с "FOR UPDATE" и тогда не нужно вообще трогать триггер "on-lock".
...
Рейтинг: 0 / 0
forms и updatable view
    #32712591
Ambitzia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а Вы попробуйте сделать view с for update и открыть этот блок в форме.

По-моему, когда форма запрашивает в блок данные, она пытается сделать for update на эти данные. Если изначально в источнике for update задать, то, наверное, ошибка возникнет. Нет времени проверить.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
forms и updatable view
    #37262496
Bombat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно создать на блоке триггер ON-LOCK и прописать в нем NULL;

Модератор: Тема перенесена из форума "Oracle".
...
Рейтинг: 0 / 0
forms и updatable view
    #37266693
ten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bombat,

Весьма актуально
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / forms и updatable view
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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