473,385 Members | 1,693 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

Returning SETOF in plpgsql

Hi thescripts team,

I would like to ask for your help once again regarding returning set of records in plpgsql. I followed examples presented in other sites regarding this function but my script doesnt work.

here's my code
Expand|Select|Wrap|Line Numbers
  1. create or replace function find_postal(varchar, varchar, varchar) returns setof record as
  2. '
  3.     declare 
  4.         ret_row record;
  5.         prefnme alias for $1;
  6.         cty alias for $2;
  7.         dname alias for $3;
  8.     begin    
  9.     for ret_row in select * from area where pref_nme like coalesce ($1,''%'') or city like COALESCE($2,''%'') or district_nme like coalesce ($3,''%'') loop
  10.         return next ret_row;
  11.     end loop;
  12.     return;
  13.     end; 
  14. '
  15. language 'plpgsql';
And here's the error being returned:

ERROR: set-valued function called in context that cannot accept a set
CONTEXT: PL/pgSQL function "find_postal" line 8 at return next


Thanks in advance for those who can help me
Jul 27 '07 #1
6 18307
michaelb
534 Expert 512MB
I think this is the easiest way to make this function work:
  1. Drop the function
  2. Change the function return type from "setof record" to "setof <table-name>"
    ("setof area" in this case)
  3. Optionally, you may also like to change declaration "ret_row record;" to "ret_row area%rowtype;"
    (it should work either way)
  4. Recompile, and don't forget that functions returning setof must be called as
    select * from func_name (...)
    select func_name (...) will not work.
Jul 29 '07 #2
Hi michaelb,

Thanks again for helping! It worked now!
Jul 30 '07 #3
hi
i have the problem like this but i couldn't solve this yet.
i have the function below;
Expand|Select|Wrap|Line Numbers
  1. CREATE OR REPLACE FUNCTION "public"."fnc_dupps" (x integer, out y integer, out z integer, out t varchar) RETURNS SETOF "pg_catalog"."record" AS
  2. $body$
  3. declare cur_koyler cursor for
  4.   select koy_bolgeid,koy_idno from tbl_koyler;
  5. declare k integer;
  6. begin
  7.  open cur_koyler;
  8.  loop
  9.    exit when not found;
  10.    fetch cur_koyler into y,z;
  11.    raise exception 'Hata ';
  12.    return next;
  13.  end loop;
  14. end;
  15. $body$
  16. LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
  17.  
When i execute the function it turns me nothing.
but
Expand|Select|Wrap|Line Numbers
  1. select koy_bolgeid,koy_idno from tbl_koyler
  2.  
query has a records. i send this for example. the original has the much outputs. so i dont want to set return type to table. (if there is no way i have to do sure.)
Best Regards.
Pg : 8.2
Platform : xp sp2
Best Regards.
Aug 8 '07 #4
hi
i create the type for this function
Expand|Select|Wrap|Line Numbers
  1. create type typ_dupps as
  2. (x integer,
  3. y integer,
  4. z varchar )
  5.  
and the functions latest version is below
Expand|Select|Wrap|Line Numbers
  1. CREATE OR REPLACE FUNCTION "public"."fnc_dupps" (x integer) RETURNS SETOF "pg_catalog"."record" AS
  2. $body$
  3. declare sonuc typ_dupps;
  4. declare crs_koyler cursor for
  5. select koy_idno,koy_bolgeid,koy_ad from tbl_koyler;
  6. declare i integer;
  7. declare k varchar;
  8.  
  9. begin
  10. open crs_koyler;
  11. loop
  12.   exit when not found;
  13.   fetch crs_koyler into sonuc.x,sonuc.y;
  14.   return next sonuc;
  15. end loop;
  16. end;
  17. $body$
  18. LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
  19.  
it is running perfectly .
Best Regards.
Aug 8 '07 #5
HI
i tried to run the following function. Can you help me. It is giving runtime error as

ERROR: cursor "cusr" does not exist
CONTEXT: PL/pgSQL function "com_attr_ins" line 15 at fetch

The function code is

Expand|Select|Wrap|Line Numbers
  1. CREATE OR REPLACE FUNCTION "public"."com_attr_ins" () RETURNS "pg_catalog"."void" AS
  2. $body$
  3. DECLARE
  4.        attr_id      integer;
  5.        cat_attr_id  integer;
  6.        nam          varchar(512);
  7.        lbl          varchar(512);
  8.        val_type     bigint;
  9.        aggr_type    bigint;
  10.        allow_null   bool;
  11.        cusr         CURSOR for select id , comp_cat_attr_id from component_attr;
  12. BEGIN
  13.      loop
  14.          fetch cusr INTO attr_id , cat_attr_id;
  15.          if not found then
  16.          exit;
  17.          end if;
  18.          select into nam name from component_category_attr where id = cat_attr_id;
  19.          select into lbl label from component_category_attr where id = cat_attr_id;
  20.          select into val_type value_type from component_category_attr where id = cat_attr_id;
  21.          select into aggr_type AGGREGATION_TYPE from component_category_attr where id = cat_attr_id;
  22.          select into allow_null ALLOW_NULL_VALUE from component_category_attr where id = cat_attr_id;
  23.           update temp_attr set label = lbl ,
  24.                           value_type = val_type ,
  25.                           aggregation_type = aggr_type,
  26.                           allow_null_value = allow_null
  27.                       where id = attr_id and COMP_CAT_ATTR_ID = cat_attr_id;
  28.      end loop;
  29. end;
  30. $body$
  31. LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Feb 21 '08 #6
rski
700 Expert 512MB
see here

i don't see where do you open a cursor
Feb 21 '08 #7

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: Julie May | last post by:
I have 90% of my function working and I know to get the next 10% it is justa matter of getting the quotations and the escaping quotations correct. Here is the portion that does work: <working...
22
by: Christopher Murtagh | last post by:
Greetings, I'm trying to write a pl/perl function that will return multiple rows. I've looked all over the web and only found vague references as to how to do this (some said it was possible,...
2
by: Christopher Murtagh | last post by:
Greetings, I've got a fairly simple function that I'm trying to return a set, but seem to have come across a stumbling block. When I execute the function below (the input params are not used at...
9
by: Ron St-Pierre | last post by:
On a daily basis I place a lot of data into the empty table dailyList, and from that data update certain fields in currentList. I thought that using a function would be a good way to do this(?)....
3
by: ezra epstein | last post by:
I'm been banging my head over this for a little while now. Here's a simple function to return a record: <code> CREATE OR REPLACE FUNCTION create_item_record_for_override(INTEGER, VARCHAR )...
9
by: Karl O. Pinc | last post by:
I want to return multiple values, but not a set, only a single row, from a plpgsql function and I can't seem to get it to work. (I suppose I'd be happy to return a set, but I can't seem to make...
5
by: Robert Fitzpatrick | last post by:
Can someone point me to some more information or perhaps show an example of returning a recordset from a plpgsql function. I'd like to send an argument or arguments to the function, do some queries...
2
by: Vladimir M | last post by:
Hi I am writing a function with PL/pgSQL, which returns result of some complex query with several tables. In manual i found such example: CREATE OR REPLACE FUNCTION Test() RETURNS SETOF...
0
by: lazybee26 | last post by:
Hello – I’m trying to findout a better solution to this approach. Currently if I have to return columns from multiple tables, I have to define my own TYPE and then return SETOF that type in...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.