Solved

pl/sql exclusive OR

Posted on 2007-11-15
5
5,432 Views
Last Modified: 2013-12-07
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
0
Comment
Question by:claghorn
5 Comments
 
LVL 1

Expert Comment

by:bobbymanocha
ID: 20289580
Here's one way:

create or replace function f_xor(
  condition1 boolean,
  condition2 boolean) return boolean
as
begin
  return (condition1 and condition2);
end;
/
0
 
LVL 1

Expert Comment

by:bobbymanocha
ID: 20289649
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
 
LVL 27

Accepted Solution

by:
kretzschmar earned 50 total points
ID: 20296637
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
 
LVL 28

Expert Comment

by:Naveen Kumar
ID: 20297887
( c1 and not c2 ) or ( c2 and not c1 )  --> i think this should be fine as well.

Thanks
0
 

Author Comment

by:claghorn
ID: 20298518
OK, thank you all, I will assess which one works for me tonight and release the points.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Introduction A previously published article on Experts Exchange ("Joins in Oracle", http://www.experts-exchange.com/Database/Oracle/A_8249-Joins-in-Oracle.html) makes a statement about "Oracle proprietary" joins and mixes the join syntax with gen…
How to Create User-Defined Aggregates in Oracle Before we begin creating these things, what are user-defined aggregates?  They are a feature introduced in Oracle 9i that allows a developer to create his or her own functions like "SUM", "AVG", and…
This video explains at a high level with the mandatory Oracle Memory processes are as well as touching on some of the more common optional ones.
This video explains at a high level about the four available data types in Oracle and how dates can be manipulated by the user to get data into and out of the database.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now