Несколько таблиц объединения в классическом отчете; Вставка только первой строки вместо проверенной строки - PullRequest
0 голосов
/ 27 апреля 2018

У меня вопрос к классическому отчету, который основан на объединении нескольких таблиц. На котором я написал процесс, чтобы зациклить и вставить только отмеченный флажок. но это только выбрать первый пункт. Однако, если сделать это на одном столе, он будет работать правильно. Буду признателен, если кто-нибудь сможет мне помочь с вставленной выбранной записью, если запрос основан на нескольких соединениях.

Мой запрос, как показано ниже.

select apex_item.checkbox2(1, ord.rowid) sel,
apex_item.text(2,cust.name) Customer,
apex_item.text(3, it.item_id) Item,
apex_item.text(4,it.product_id) Product,
apex_item.text(5,price) price,
apex_item.text(6,quantity)||apex_item.hidden(7,ord.id)   qty
from s_ord ord,
s_item it,
s_customer cust
where ord.id=it.ord_id
and cust.id=ord.customer_id

Мой процесс выглядит следующим образом;

for i in 1..apex_application.g_f01.count loop
    APEX_DEBUG_MESSAGE.LOG_MESSAGE(p_message => 'G_F01 : '||APEX_APPLICATION.G_F01(i), p_level => 1);
    APEX_DEBUG_MESSAGE.LOG_MESSAGE(p_message => '   Q1 : '||APEX_APPLICATION.G_F02(i), p_level => 1);
    APEX_DEBUG_MESSAGE.LOG_MESSAGE(p_message => '   P1 : '||APEX_APPLICATION.G_F03(i), p_level => 1);
end loop;
end;

1 Ответ

0 голосов
/ 28 апреля 2018

Насколько я могу судить, вы не сможете сделать это, если табличная форма будет создана как JOIN из двух (или более) таблиц (не выяснил, почему).

Вот что я делаю:

  • Я основываю свою табличную форму на одной таблице (той, которую планирую работать (вставить, обновить) с
  • столбцы, которые обычно выбираются из других таблиц (с использованием JOIN с), отображаются с использованием функции

Это решает проблему.

Например: вы хотите обновить информацию о сотруднике, а также отобразить название отдела, в котором они работают.

Не

select e.empno, 
  e.ename, 
  d.dname,
  e.sal
from emp e join dept d on e.deptno = d.deptno;

Do:

create function f_dname (par_deptno in dept.deptno%type) 
  return dept.dname%type
is
  retval dept.dname%type;
begin
  select max(d.dname) 
    into retval
    from dept d
    where d.deptno = par_deptno;
  return retval;
end;
/

select e.empno, 
  e.ename, 
  f_dname (e.deptno) dname,  --> function instead of DEPT.DNAME
  e.sal
from emp e;                  --> no join

Надеюсь, это поможет.

...