Thread: FW: need help on stored procedures
> Hi all, > > I have written a sample procedure where i pass 2 arguments. Based on the > arguments i need to select few fields from a table. After selecting the > fields i have to display them. How do i return the selected fields. The > procedure is as follows > > CREATE FUNCTION PP_ReadParameter(integer,varchar) RETURNS TEXT AS ' > DECLARE > ParamId INTEGER; > ParamName TEXT; > IsFixEnum BIT; > IsExpandEnum BIT; > BEGIN > IF $1 IS NOT NULL THEN > SELECT INTO ParamId,ParamName,IsFixEnum,IsExpandEnum > AttributeId,AttributeName,IsFixEnum,IsExpandEnum > FROM Attributes > WHERE AttributeId = $1 > ORDER BY AttributeId; > > RETURN ''$1 successfull''; > END IF; > ...... > ...... > END; > ' LANGUAGE 'plpgsql'; > > So when i say SELECT PP_ReadParameter(50,Null)......it should return the > ParamId,ParamName,.... > But to check the working of the function i just return ''$1 successfull'' > as i dont know how to return the tuple. > > Please help me on this > > > With Best Regards > Pradeep Kumar P J >
On Wed, 7 Jul 2004, Pradeepkumar, Pyatalo (IE10) wrote: > > I have written a sample procedure where i pass 2 arguments. Based on the > > arguments i need to select few fields from a table. After selecting the > > fields i have to display them. How do i return the selected fields. The > > procedure is as follows > > > > CREATE FUNCTION PP_ReadParameter(integer,varchar) RETURNS TEXT AS ' > > DECLARE > > ParamId INTEGER; > > ParamName TEXT; > > IsFixEnum BIT; > > IsExpandEnum BIT; > > BEGIN > > IF $1 IS NOT NULL THEN > > SELECT INTO ParamId,ParamName,IsFixEnum,IsExpandEnum > > AttributeId,AttributeName,IsFixEnum,IsExpandEnum > > FROM Attributes > > WHERE AttributeId = $1 > > ORDER BY AttributeId; > > > > RETURN ''$1 successfull''; > > END IF; > > ...... > > ...... > > END; > > ' LANGUAGE 'plpgsql'; > > > > So when i say SELECT PP_ReadParameter(50,Null)......it should return the > > ParamId,ParamName,.... > > But to check the working of the function i just return ''$1 successfull'' > > as i dont know how to return the tuple. There's a question of whether you expect this to return one row or multiple rows. I'm guessing multiple rows, so... Something of the general form: CREATE TYPE newtype AS (ParamId ...); CREATE FUNCTION PP_ReadParameter(integer,varchar) RETURNS setof newtype AS ' DECLARE rec newtype; BEGIN IF $1 IS NOT NULL THEN FOR rec IN SELECT ParamId, ParamName, IsFixEnum, IsExpandEnum, AttributeId, AttributeName FROM Attributes WHERE AttributeId = $1 ORDER BY AttributeId LOOP RETURN NEXT rec; END LOOP; RETURN; END IF; ... END;' language 'plpgsql'; General Bits (http://www.varlena.com/varlena/GeneralBits/) and techdocs.postgresql.org have some documents on returning sets from functions that you might want to look at.
When you send the query to be parsed I presume you must somehow tell which elements of it are parameters. How do you do this? e.g.: SELECT name, phone FROM friends WHERE age > 25; How would I write this if "name" and "25" must be parameters? Or if the operator ">" should be a parameter or modifiable in another way? (Is there a good tutorial site on the extended query language? It seems there's almost no information about this on the net.) Thanks, Marc
At 4:26 PM +0200 7/8/04, M. Bastin wrote: >When you send the query to be parsed I presume you must somehow tell >which elements of it are parameters. How do you do this? > >e.g.: SELECT name, phone FROM friends WHERE age > 25; > >How would I write this if "name" and "25" must be parameters? Or if >the operator ">" should be a parameter or modifiable in another way? Can "age > 25" as a whole be a parameter? Thanks, Marc
"M. Bastin" <marcbastin@mindspring.com> writes: > At 4:26 PM +0200 7/8/04, M. Bastin wrote: >> When you send the query to be parsed I presume you must somehow tell >> which elements of it are parameters. How do you do this? >> e.g.: SELECT name, phone FROM friends WHERE age > 25; >> How would I write this if "name" and "25" must be parameters? SELECT name, phone FROM friends WHERE $1 > $2; >> Or if >> the operator ">" should be a parameter or modifiable in another way? You cannot make an operator a parameter. It's not very clear what it would mean to prepare a query in which some operators remain unknown --- certainly the planner could not produce any useful plan for it. > Can "age > 25" as a whole be a parameter? Only if you are prepared to supply a boolean value for it at Bind time. regards, tom lane