Можно ли создать отношения мастер-детализация в формах Oracle, когда оба блока основаны на процедуре? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть два блока, основанных на процедуре, и я хочу создать между ними отношения мастер-детали.

Я делаю это с помощью Data Block Wizzard.Это создает триггер ON-CHECK-DELETE-MASTER, этот триггер предполагает, что мой блок детализации основан на таблице (FRL_XXX.TRIGGERS_QUERY, but it is a procedure) и генерирует курсор:

CURSOR TRIGGERS_cur IS      
SELECT 1 FROM FRL_XXX.TRIGGERS_QUERY F     
WHERE F.PTG_PST_CODE = :S_TYPES.PST_CODE;

Есть ли обходной путь для решения этой проблемы?

КогдаЯ пытаюсь удалить этот триггер или удалить курсор, я получаю сообщение об ошибке:

FRM-30409: Delete Record Behavior for the relation is invalid.

1 Ответ

0 голосов
/ 01 марта 2019

Я никогда не делал этого, но - позвольте мне думать вслух.

Если блок данных основан на процедуре, это означает, что процедура возвращает (в качестве параметра IN OUT) массив.Я бы сказал, что вам придется

  • создать свой собственный триггер (то есть заменить тот, который создан мастером
    • , обратите внимание, что эти триггеры обычно имеют комментарий "неизмените его! ". Если вы снова запустите мастер, он может перезаписать ваш код, поэтому безопасный подход заключается в создании процедуры, которая будет выполнять эту работу, и вызове этой процедуры из триггера
  • объявляет локальную переменную (массив) и извлекает в нее данные, передает все параметры процедуре, как вы это делали при ее вызове, чтобы заполнить блок данных.
  • просмотреть содержимое массива и проверить,есть любая строка, которая удовлетворяет условию PTG_PST_CODE = :S_TYPES.PST_CODE
  • , если это так, делайте то, что делает в этом случае триггер Wizard

В принципе, я думаю, что вам придется написать свой собственный процесс, которыйзаменит поведение форм по умолчанию.

...