Firebird SQL Development
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
User Name:
Password:
Remember me
Go Back   Dev Shed ForumsDatabasesFirebird SQL Development

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Rate Thread Display Modes
 
Unread Dev Shed Forums Sponsor:
  #1  
Old August 24th, 2005, 06:44 AM
Fredyprogram Fredyprogram is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Aug 2005
Posts: 8 Fredyprogram User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 1 h 18 m 37 sec
Reputation Power: 0
Filter in a Stored Procedure

I have the following Stored Procedure:

CREATE PROCEDURE return_company_data
(
PSTATE VARCHAR(10)
)
RETURNS (
CODE INTEGER,
NAME VARCHAR(10),
STATE VARCHAR(10))

AS
BEGIN
FOR
SELECT CODE, NAME, STATE
FROM COMPANY
INTO :CODE, :NAME, :STATE
DO
SUSPEND;
END

I want to change this Stored Procedure in which if the parameter "PSTATE" is not blank it adds to the select the line: "WHERE STATE = :PSTATE". I tried putting:
IF (PSTATE <> '') THEN
WHERE STATE = PSTATE

But it doesnīt work. How can I solve this ??? Thanx

Reply With Quote
  #2  
Old August 26th, 2005, 02:16 AM
SilverDB's Avatar
SilverDB SilverDB is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Sep 2004
Location: Romania
Posts: 173 SilverDB User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 1 Day 45 m 53 sec
Reputation Power: 4
Send a message via Yahoo to SilverDB
If your PSTATE field is a varchar(1) or a field that contains no similar data (ex: PSTATE IN (a,b,c,d,h,x,y)) you can try this instead:
Code:
SELECT CODE, NAME, STATE
FROM COMPANY
WHERE PSTATE STARTING WITH :PARAMETER
INTO :CODE, :NAME, :STATE


USING "STARTING WITH", IF PARAMETER IS NULL WILL RETURN ALL THE DATA, ELSE IT WILL RETURN THE FIELD THAT CONTAINS THE PARAMETER.

This is "work-around" for your problem that will not work for a PSTATE field like "syn","sync","synch","synchr","synchro" because if you run a SELECT .... WHERE PSTATE STARTING WITH "syn" it will return all the fields.

Hope this helps.
__________________
If i've been helpful, please add to my reputation.
My unfinished site: http://www.dever.ro

Reply With Quote
  #3  
Old August 26th, 2005, 07:21 AM
JGeer JGeer is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Jan 2005
Posts: 14 JGeer User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 5 h 9 m 57 sec
Reputation Power: 0
If you don't mind to test for null you can do:

Code:
CREATE PROCEDURE return_company_data
(
  PSTATE VARCHAR(10) 
)
RETURNS (
CODE INTEGER,
NAME VARCHAR(10),
STATE VARCHAR(10))
AS
BEGIN
FOR 
SELECT CODE, NAME, STATE 
FROM COMPANY
WHERE :pState IS NULL OR STATE = :pSTATE
INTO :CODE, :NAME, :STATE
DO
SUSPEND;
END

Reply With Quote
  #4  
Old September 3rd, 2005, 05:41 PM
2Fast4YouBR 2Fast4YouBR is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Apr 2005
Posts: 5 2Fast4YouBR User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 2 h 12 m 42 sec
Reputation Power: 0
Quote:
Originally Posted by JGeer
If you don't mind to test for null you can do:

Code:
CREATE PROCEDURE return_company_data
(
  PSTATE VARCHAR(10) 
)
RETURNS (
CODE INTEGER,
NAME VARCHAR(10),
STATE VARCHAR(10))
AS
BEGIN
FOR 
SELECT CODE, NAME, STATE 
FROM COMPANY
WHERE :pState IS NULL OR STATE = :pSTATE
INTO :CODE, :NAME, :STATE
DO
SUSPEND;
END
I use my "Filter Search" Procedures like this.. works fine for me.. ONLY NOT WORK with BLOB(TEXT) fieldīs:

SET TERM ^ ;
CREATE PROCEDURE aspEquipeSelSrch
(
"iidEquipe" INTEGER,
"inome" VARCHAR(150),
"ihomePage" VARCHAR(100),
"iemail" VARCHAR(150)
)
RETURNS
(
"idEquipe" INTEGER,
"nome" VARCHAR(150),
"homePage" VARCHAR(100),
"email" VARCHAR(150)
)
AS
BEGIN
FOR
SELECT
"idEquipe",
"nome",
"homePage",
"email"
FROM "Equipe"
WHERE
COALESCE("Equipe"."idEquipe", 0) = COALESCE(:"iidEquipe", "Equipe"."idEquipe", 0) AND
COALESCE("Equipe"."nome", '') = COALESCE(:"inome", "Equipe"."nome", '') AND
COALESCE("Equipe"."homePage", '') = COALESCE(:"ihomePage", "Equipe"."homePage", '') AND
COALESCE("Equipe"."email", '') = COALESCE(:"iemail", "Equipe"."email", '')
INTO
:"idEquipe",
:"nome",
:"homePage",
:"email"
DO
BEGIN
SUSPEND;
END
END
^
SET TERM ; ^
GRANT SELECT ON "Equipe" TO PROCEDURE aspEquipeSelSrch;
GRANT EXECUTE ON PROCEDURE aspEquipeSelSrch TO SYSDBA;

Reply With Quote
Reply

Viewing: Dev Shed ForumsDatabasesFirebird SQL Development > Filter in a Stored Procedure


Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump


Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
  
 





© 2003-2008 by Developer Shed. All rights reserved. DS Cluster 5 hosted by Hostway