?
Solved

pl/sql exclusive OR

Posted on 2007-11-15
5
Medium Priority
?
5,857 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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 150 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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…
Configuring and using Oracle Database Gateway for ODBC Introduction First, a brief summary of what a Database Gateway is.  A Gateway is a set of driver agents and configurations that allow an Oracle database to communicate with other platforms…
This video shows setup options and the basic steps and syntax for duplicating (cloning) a database from one instance to another. Examples are given for duplicating to the same machine and to different machines
Via a live example, show how to take different types of Oracle backups using RMAN.
Suggested Courses

770 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