Solved

Conditional Clauses in Where or And Section of a SQL statement in an Oracle Stored Procedure

Posted on 2008-10-22
4
327 Views
Last Modified: 2013-12-07
I am converting from MS SQL Server to Oracle.  I've been tackling the problems one by one (with the help of Experts-exchange).  However this latest one is stumping me.

For example:

create or replace spGetTeams(teamID in number, teamName varchar2, crGetTeamInfo out sys_cursor)
as
Begin
open crGetTeamInfo for
Select team_name, team_id, team_record
From teams
where isActive = 1
And (team_id = teamID or teamID is null or teamID like '-1)
And (team_name = teamName or teamName is null or teamName like '%'||-1||'%')
null;
end spGetTeams;

The person that made the Stored procedure in MS SQL Server explained to me that that the -1 will return all records. So basically it will try to match to the parameter passed, or null records, or all records.  How would I go about doing this in PL/SQL?
0
Comment
Question by:vbemt
[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
  • 3
4 Comments
 
LVL 29

Expert Comment

by:MikeOM_DBA
ID: 22780887
try this:

CREATE OR REPLACE PROCEDURE spgetteams (
   teamid          IN       NUMBER,
   teamname                 VARCHAR2,
   crgetteaminfo   OUT      sys_cursor
)
AS
BEGIN
   OPEN crgetteaminfo FOR
      SELECT team_name, team_id, team_record
        FROM teams
       WHERE isactive = 1
         AND (team_id = teamid OR teamid IS NULL OR teamid LIKE '%')
         AND (team_name = teamname OR teamname IS NULL OR teamname LIKE '%');
END;

Open in new window

0
 
LVL 29

Accepted Solution

by:
MikeOM_DBA earned 500 total points
ID: 22780901

Small correction:
CREATE OR REPLACE PROCEDURE spgetteams (
   teamid          IN       NUMBER,
   teamname                 VARCHAR2,
   crgetteaminfo   OUT      sys_cursor
)
AS
BEGIN
   OPEN crgetteaminfo FOR
      SELECT team_name, team_id, team_record
        FROM teams
       WHERE isactive = 1
         AND (team_id = teamid OR (teamid IS NULL AND teamid LIKE '%'))
         AND (team_name = teamname OR (teamname IS NULL AND teamname LIKE '%'));
END;

Open in new window

0
 

Author Comment

by:vbemt
ID: 22786168
I think that's what I need, just have a miner question about the 2 examples you gave.  I'm trying to understand the difference between the 2.  I know one uses "AND" and the other uses "OR" but I don't see how it works.
0
 
LVL 29

Expert Comment

by:MikeOM_DBA
ID: 22790090

Difference is the first one had a typo: missing parenthesis.

Therefore you have this:

1) if parameter exists -> query ( column = parameter ...)
2) else (OR), if parameter does not exist ->  query (parameter IS NULL AND column like '%')


0

Featured Post

Independent Software Vendors: 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

Truncate is a DDL Command where as Delete is a DML Command. Both will delete data from table, but what is the difference between these below statements truncate table <table_name> ?? delete from <table_name> ?? The first command cannot be …
Working with Network Access Control Lists in Oracle 11g (part 2) Part 1: http://www.e-e.com/A_8429.html Previously, I introduced the basics of network ACL's including how to create, delete and modify entries to allow and deny access.  For many…
Via a live example show how to connect to RMAN, make basic configuration settings changes and then take a backup of a demo database
This video shows information on the Oracle Data Dictionary, starting with the Oracle documentation, explaining the different types of Data Dictionary views available by group and permissions as well as giving examples on how to retrieve data from th…

759 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