Отображение данных на основе информации о сеансе пользователя - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь отобразить определенные данные, основанные на структуре пользователя сеанса (столбец STRUCT в таблице ниже

enter image description here)

, поэтому я создал глобальныйэлемент (: P0_STRUCT), который получает значение структуры пользователя сеанса при входе в систему, а затем я написал эту функцию PL / SQL в исходном коде для классического отчета

declare
v_query    VARCHAR2(500);
BEGIN
IF :P0_STRUCT is not null
   THEN 
   v_query := 'select ID_CR,
       NUM,
       DATE_AR,
       EXPEDITEUR,
       NOM_EXPEDITEUR,
       REFERENCE,
       OBJET,
       E'||:P0_STRUCT||',
       I'||:P0_STRUCT||',
       C'||:P0_STRUCT||',
       INSTRUCTION,
       DATE_INSTRUCTION,
       COPIES,
       OBSERVATION,

       NECESSITE_REP,
       REF_REPONSE
  from COURRIER_ARRIVE
  where E'||:P0_STRUCT||'= ''A Exécuter'' OR I'||:P0_STRUCT|| '= ''P/Information'' OR C'||:P0_STRUCT||' = ''P/Circulation'' '; 
  else v_query := 'select * from COURRIER_ARRIVE where ECIF = ''a'' ';

 END IF;
   return v_query ;
END;

проблема в том, что всетри части условия должны быть истинными, чтобы функция возвращала данные в отчете, даже если бы я использовала ИЛИ не AND.Я хочу получить данные, если только одна или все части условия выполняются.Пожалуйста, как это можно решить?

1 Ответ

0 голосов
/ 24 октября 2018

«Только один ИСТИНА» - это функция XOR, однако она не существует в Oracle.Но

A XOR B = (A OR B) AND NOT (A AND B)

Таким образом, для трех членов это будет

(A AND B AND C) OR (A XOR B XOR C) = (A OR B OR C) AND ( NOT (A AND B) OR NOT (A AND C) NOT (B AND C))

Заменить A на E'||:P0_STRUCT||'= ''A Exécuter'', B на I'||:P0_STRUCT|| '= ''P/Information'' и т. Д.

...