Solved

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

Posted on 2008-10-22
4
326 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

Suggested Solutions

Title # Comments Views Activity
Create Index on a Materialized View 5 46
SQL query to select row with MAX date 7 40
Excess Redo 3 32
MS SQL Server Management Studio R2 4 26
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‚Ķ
When it comes to protecting Oracle Database servers and systems, there are a ton of myths out there. Here are the most common.
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
This video shows how to Export data from an Oracle database using the Original Export Utility.  The corresponding Import utility, which works the same way is referenced, but not demonstrated.

740 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