Using rowtype parameter

Started by Peterabout 20 years ago3 messagesgeneral
Jump to latest
#1Peter
peter@greatnowhere.com

I'm trying to write a stored proc (in pl/Pgl) that can accept rowtypes as arguments:

CREATE or replace FUNCTION www_get_data(user_id "varchar", objectname "varchar", operation "varchar", primarykeyvalue anyelement, rowvalue anyelement)
RETURNS SETOF varchar[] AS
...

Whenever I try to typecast a rowtype in function call like this:

select www_get_data ('test','USERS','QUERY',CAST(('%','%','','','') as mytable),CAST(('%','%','','','') as mytable))

I get error message:

ERROR: could not determine actual argument type for polymorphic function "www_get_data"

What gives? I thought typecast should suffice? Are there any limitations on using composite data types for anyelement parms?

Peter

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter (#1)
Re: Using rowtype parameter

"Peter Zeltins" <peter@greatnowhere.com> writes:

I'm trying to write a stored proc (in pl/Pgl) that can accept rowtypes =
as arguments:

CREATE or replace FUNCTION www_get_data(user_id "varchar", objectname =
"varchar", operation "varchar", primarykeyvalue anyelement, rowvalue =
anyelement)
RETURNS SETOF varchar[] AS

select www_get_data ('test','USERS','QUERY',CAST(('%','%','','','') as =
mytable),CAST(('%','%','','','') as mytable))

ANYELEMENT only matches scalar types. I don't think we have any support
for accepting an arbitrary row type as a function argument. There's
been some speculation about allowing RECORD to do that, but it's not
done.

regards, tom lane

#3Peter
peter@greatnowhere.com
In reply to: Peter (#1)
Re: Using rowtype parameter

ANYELEMENT only matches scalar types. I don't think we have any support
for accepting an arbitrary row type as a function argument. There's
been some speculation about allowing RECORD to do that, but it's not
done.

OK, that clears it up. RECORD would actually do nicely. Right now I'll be
forced to pass varchar/text arrays which can potentially lead to type
conversion issues.

Peter