оракуловые формы получают данные, которые находятся как в таблице, так и в многострочном блоке - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть таблица, которая выглядит следующим образом

+-------+
|stud_id|
+-------+
|10     |
|13     |
|12     |
|11     |
|15     |
+-------+

и многострочный блок, подобный этому

enter image description here

что яхотел, чтобы, например, после нажатия на кнопку у меня были значения 13,12,14 в моем многострочном блоке, появится сообщение, которое содержит stud_id, который находится как в моей таблице, так и в многострочном блоке блоков, которые являются числами 13и только 12 , а не 14, потому что он не включен в мою таблицу.

1 Ответ

0 голосов
/ 07 февраля 2019

Табличная форма (та, которая содержит несколько строк) основана на некоторой таблице, я полагаю.Давайте назовем это FORM_TBL.Кроме того, предположим, что имя таблицы, в которой содержатся опубликованные вами данные, называется STUD_TBL.

. Простой способ - опубликовать данные, введенные в форму (что означает, что они окажутся втаблица, но не будет зафиксирована, и никто, кроме вас, не увидит эти строки), а затем - с помощью оператора set INTERSECT - найдет общие значения.Это будет триггер WHEN-BUTTON-PRESSED:

declare
  retval varchar2(200);
begin
  post; 

  select listagg(stud_id, ',') within group (order by stud_id) 
  into retval
  from (select stud_id from stud_tbl
        intersect
        select s_id from form_tbl
      );

  message('Common values: ' || retval);
end;

Если ваша версия Forms не поддерживает LISTAGG, вы можете сделать это в цикле:

declare
  retval varchar2(200);
begin
  post; 

  for cur_r in (select stud_id from stud_tbl
                intersect
                select s_id from form_tbl
               )
  loop
    retval := retval ||', '|| cur_r.stud_id;
  end loop;
  message('Common values: ' || retval);
end;

В противном случае, еслиPOST не удовлетворяет вашим потребностям, вам придется пройтись по всем строкам в форме и проверить, существуют ли они в STUD_TBL или нет.

...