我正在尝试根据会话用户的结构显示某些数据 (下表中的“ STRUCT”列
所以我创建了一个全局项目(: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。 如果条件中只有一个或所有部分为真,我想获取数据。 拜托,这怎么解决?
答案 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''
,等等。