Is the use of array as PL/PGSQL function arguments ?
Hello,
Since it's not possible to do a function with a variable number of arguments, I am wondering if it is possible to use an array as an argument in a PL/PGSQL function ?
CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[], events.id%TYPE) RETURNS BOOLEAN AS '
BEGIN
...several sql queries that are OK...
RETURN TRUE;
END;
' LANGUAGE 'plpgsql';
I am currently getting this error : ERROR: parser: parse error at or near "["
But I don't see anything in the documentation that forbids the use of array as arguments. So, did I make a mistake or is it forbidden ?
Thanks in advance :-)
---------------------------------------
Bruno BAGUETTE (pgsql-ml@baguette.net)
pgsql-ml@baguette.net writes:
Since it's not possible to do a function with a variable number of arguments, I am wondering if it is possible to use an array as an argument in a PL/PGSQL function ?
CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[], events.id%TYPE) RETURNS BOOLEAN AS '
You can certainly use arrays as arguments, but I don't think you can
combine %TYPE with [] like that.
regards, tom lane
CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[],
events.id%TYPE) RETURNS BOOLEAN AS 'You can certainly use arrays as arguments, but I don't think
you can combine %TYPE with [] like that.
Thanks Tom for the information ! :-)
When I create functions with %TYPE, PostgreSQL replies that it will
convert the %TYPE with a VARCHAR (for example). So it could replace a
%TYPE[] by a VARCHAR[] (in my example) ?
It seems that this modification could be done easily, I will try to find
in the source code to create this patch. (Without any warranties, I
never done a patch for PostgreSQL).
In the meantime, is it possible to add this feature in the TODO list ?
Regards,
---------------------------------------
Bruno BAGUETTE - pgsql-ml@baguette.net
Added to TODO:
o Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[]
---------------------------------------------------------------------------
Bruno BAGUETTE wrote:
CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[],
events.id%TYPE) RETURNS BOOLEAN AS 'You can certainly use arrays as arguments, but I don't think
you can combine %TYPE with [] like that.Thanks Tom for the information ! :-)
When I create functions with %TYPE, PostgreSQL replies that it will
convert the %TYPE with a VARCHAR (for example). So it could replace a
%TYPE[] by a VARCHAR[] (in my example) ?It seems that this modification could be done easily, I will try to find
in the source code to create this patch. (Without any warranties, I
never done a patch for PostgreSQL).In the meantime, is it possible to add this feature in the TODO list ?
Regards,
---------------------------------------
Bruno BAGUETTE - pgsql-ml@baguette.net---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Tom Lanes a écrit :
pgsql-ml@baguette.net writes:
Since it's not possible to do a function with a variable number of
arguments, I am wondering if it is possible to use an array as an
argument in a PL/PGSQL function ?CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[],
events.id%TYPE) RETURNS BOOLEAN AS 'You can certainly use arrays as arguments, but I don't think
you can combine %TYPE with [] like that.
I've checked in the PostgreSQL 7.3.4 sources
(backend/parser/parse_type.c) and especially the char *
TypeNameToString(const TypeName *typename) function.
At the end of this function it seems that manages %TYPE that is combined
with [] :
if (typename->arrayBounds != NIL)
appendStringInfo(&string, "[]");
so I'm asking why I can't write a PL/PGSQL function like
CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[],
events.id%TYPE) RETURNS BOOLEAN AS '
Am I looking at the wrong place in the sources ?
Regards,
---------------------------------------
Bruno BAGUETTE - pgsql-ml@baguette.net
We just added this to TODO:
o Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[]
but that will help TYPE inside a function, not as part of the function
parameter list.
Do I need a TODO for this, or is it listed under some other item?
---------------------------------------------------------------------------
Bruno BAGUETTE wrote:
Tom Lanes a ?crit :
pgsql-ml@baguette.net writes:
Since it's not possible to do a function with a variable number of
arguments, I am wondering if it is possible to use an array as an
argument in a PL/PGSQL function ?CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[],
events.id%TYPE) RETURNS BOOLEAN AS 'You can certainly use arrays as arguments, but I don't think
you can combine %TYPE with [] like that.I've checked in the PostgreSQL 7.3.4 sources
(backend/parser/parse_type.c) and especially the char *
TypeNameToString(const TypeName *typename) function.At the end of this function it seems that manages %TYPE that is combined
with [] :if (typename->arrayBounds != NIL)
appendStringInfo(&string, "[]");so I'm asking why I can't write a PL/PGSQL function like
CREATE OR REPLACE FUNCTION myownfunction(members.id%TYPE[],
events.id%TYPE) RETURNS BOOLEAN AS 'Am I looking at the wrong place in the sources ?
Regards,
---------------------------------------
Bruno BAGUETTE - pgsql-ml@baguette.net---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
We just added this to TODO:
o Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[]
but that will help TYPE inside a function, not as part of the
function parameter list.Do I need a TODO for this, or is it listed under some other item?
Hello,
I don't see anything in the TODO about the handle of %TYPE arrays in the
function parameter list. I think that this should be added in the TODO
also.
Regards :-)
---------------------------------------
Bruno BAGUETTE - pgsql-ml@baguette.net