pl/sql exclusive OR

How do you code an exclusive OR in PL SQL.
ie: one or other but not both. Is there an operator to do this?
ie: if both are true then return false
claghornAsked:
Who is Participating?
 
kretzschmarConnect With a Mentor Commented:
another sample


DECLARE
  a BOOLEAN;
  b BOOLEAN;
 
  
  FUNCTION exclusive_or(c1 IN BOOLEAN, c2 IN BOOLEAN)
  RETURN BOOLEAN
  IS 
  BEGIN
    RETURN ((c1 OR c2) AND NOT (c1 AND c2));
  END;
  
  
BEGIN
  
  a := TRUE;
  b := TRUE;
    
  IF exclusive_or(a,b) THEN
    DBMS_OUTPUT.PUT_LINE('Both TRUE results in TRUE');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Both TRUE results in FALSE');
  END IF;
  
  a := FALSE;
  b := TRUE;
    
  IF exclusive_or(a,b) THEN
    DBMS_OUTPUT.PUT_LINE('First FALSE, second TRUE results in TRUE');
  ELSE
    DBMS_OUTPUT.PUT_LINE('First FALSE, second TRUE results in FALSE');
  END IF;
 
  a := TRUE;
  b := FALSE;
    
  IF exclusive_or(a,b) THEN
    DBMS_OUTPUT.PUT_LINE('First TRUE, second FALSE results in TRUE');
  ELSE
    DBMS_OUTPUT.PUT_LINE('First TRUE, second FALSE results in FALSE');
  END IF;
 
  a := FALSE;
  b := FALSE;
    
  IF exclusive_or(a,b) THEN
    DBMS_OUTPUT.PUT_LINE('Both FALSE results in TRUE');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Both FALSE results in FALSE');
  END IF;
 
END;  
  

Open in new window

0
 
bobbymanochaCommented:
Here's one way:

create or replace function f_xor(
  condition1 boolean,
  condition2 boolean) return boolean
as
begin
  return (condition1 and condition2);
end;
/
0
 
bobbymanochaCommented:
I posted the wrong code earlier.  Sorry about that.

create or replace function f
(condition1 boolean, condition2 boolean) return boolean as  
begin
return XOR(condition1, condition2);
end;
/
0
 
Naveen KumarProduction Manager / Application Support ManagerCommented:
( c1 and not c2 ) or ( c2 and not c1 )  --> i think this should be fine as well.

Thanks
0
 
claghornAuthor Commented:
OK, thank you all, I will assess which one works for me tonight and release the points.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.