Instaltiating an ARRAY within a function
===========================================
CREATE OR REPLACE FUNCTION arr( inout x varchar[] )
AS
$Z$
DECLARE
i integer;
BEGIN
select ARRAY['Danny','Eissam','Moshe'] into x;
end;
$Z$ LANGUAGE 'plpgsql' VOLATILE;
===========================================
CREATE OR REPLACE FUNCTION callarr()
returns integer
AS
$Z$
DECLARE
x varchar[6];
BEGIN
perform arr(x);
RAISE NOTICE 'x[1]=%',x[1];
return 0;
end;
$Z$ LANGUAGE 'plpgsql' VOLATILE;
===========================================
select callarr();
NOTICE: x[1]=<NULL> ??? Should have been DANNY
Should it work?
Thanks
Danny
Hello
problem is elsewhere. PostgreSQL doesn't support by ref variables. In
your sample you have to do:
CREATE OR REPLACE FUNCTION callarr()
returns integer
AS
$Z$
DECLARE
x varchar[6];
BEGIN
x := arr(x); <-------!!!!!!!!!
RAISE NOTICE 'x[1]=%',x[1];
return 0;
end;
$Z$ LANGUAGE 'plpgsql' VOLATILE;
Pavel
Show quoted text
On 12/12/2007, Abraham, Danny <danny_abraham@bmc.com> wrote:
===========================================
CREATE OR REPLACE FUNCTION arr( inout x varchar[] )
AS
$Z$
DECLARE
i integer;
BEGIN
select ARRAY['Danny','Eissam','Moshe'] into x;
end;
$Z$ LANGUAGE 'plpgsql' VOLATILE;===========================================
CREATE OR REPLACE FUNCTION callarr()
returns integer
AS
$Z$
DECLARE
x varchar[6];
BEGIN
perform arr(x);
RAISE NOTICE 'x[1]=%',x[1];
return 0;
end;
$Z$ LANGUAGE 'plpgsql' VOLATILE;===========================================
select callarr();
NOTICE: x[1]=<NULL> ??? Should have been DANNYShould it work?
Thanks
Danny
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
Danny Abraham wrote:
===========================================
CREATE OR REPLACE FUNCTION arr( inout x varchar[] )
AS
$Z$
DECLARE
i integer;
BEGIN
select ARRAY['Danny','Eissam','Moshe'] into x;
end;
$Z$ LANGUAGE 'plpgsql' VOLATILE;===========================================
CREATE OR REPLACE FUNCTION callarr()
returns integer
AS
$Z$
DECLARE
x varchar[6];
BEGIN
perform arr(x);
RAISE NOTICE 'x[1]=%',x[1];
return 0;
end;
$Z$ LANGUAGE 'plpgsql' VOLATILE;===========================================
select callarr();
NOTICE: x[1]=<NULL> ??? Should have been DANNYShould it work?
Not the way you wrote it.
You are confused by output parameters which do not work the way one
might expect. They are just a simple syntax for composite return types.
CREATE FUNCTION arr(INOUT x varchar[])
is synonymous to
CREATE FUNCTION arr(x varchar[]) RETURNS varchar[]
So your example should work if you replace
PERFORM arr(x);
with
x := arr(x);
Yours,
Laurenz Albe