Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / forms и updatable view / 11 сообщений из 11, страница 1 из 1
24.09.2004, 14:43
    #32710532
sataneyeff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
В 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
27.09.2004, 07:41
    #32712051
ten
ten
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
Добрый день.
Я в этом случае делал обновляемые поля небазовыми, при сохраненнии изменений запускал напрямую update TABLE set field = ..., после чего перечитывал блок.
...
Рейтинг: 0 / 0
27.09.2004, 10:06
    #32712178
Димитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
...
Рейтинг: 0 / 0
27.09.2004, 11:05
    #32712271
Ambitzia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
вопрос:а какие данные в этом блоке нужно изменять? здесь можно менять только два поля key-preserved table - id и worker_id.
...
Рейтинг: 0 / 0
27.09.2004, 11:15
    #32712299
Димитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
Ambitziaа какие данные в этом блоке нужно изменять? здесь можно менять только два поля key-preserved table - id и worker_id.

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

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

Во всем остальном работа как с таблицой - разрешения на изменения полей блока свойствами в design-time или runtime.
...
Рейтинг: 0 / 0
27.09.2004, 11:21
    #32712311
sataneyeff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
на 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
27.09.2004, 11:34
    #32712343
Ambitzia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
я хотела сказать, что может вообще без инстед триггеров обойтись, если изменения только основной таблицы касаются.
А on-lock возьму на заметку, а то в свое время такая же проблема была.
...
Рейтинг: 0 / 0
27.09.2004, 12:04
    #32712413
Димитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
Ambitziaя хотела сказать, что может вообще без инстед триггеров обойтись, если изменения только основной таблицы касаются.
Думаю что такой подход при разработке ПО значительно труднее в соправождении.
А вдруг нужно туже функциональность включить в другую форму.
А вдруг что-то надо изменить.
Уже в двух местах менять -- вероятность ошибку значительно возростает.
А так поменял на сервере раз отладил и спишь спокойно до очередного изменения постановки задачи.
Ambitzia
А on-lock возьму на заметку, а то в свое время такая же проблема была.
Мне тоже понравилось. Только это должно быть встроенно в Forms, а не работает.
Может нужно делать view с "FOR UPDATE" и тогда не нужно вообще трогать триггер "on-lock".
...
Рейтинг: 0 / 0
27.09.2004, 13:04
    #32712591
Ambitzia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
forms и updatable view
а Вы попробуйте сделать view с for update и открыть этот блок в форме.

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

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

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


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