根据用户会话信息显示数据

时间:2018-10-23 16:04:28

标签: oracle plsql oracle-apex-5.1

我正在尝试根据会话用户的结构显示某些数据  (下表中的“ 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;

问题是条件的所有三个部分都必须为真,以便函数返回报表上的数据,即使以为我使用OR或不使用AND。 如果条件中只有一个或所有部分为真,我想获取数据。 拜托,这怎么解决?

1 个答案:

答案 0 :(得分:1)

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'',等等。