Thread: INOUT PARAMETERS WITH RETURN TABLES IN FUNCTION
I'm trying to migration to PostgreSql from SQL Server. I have Stored Procedures what have output parameters and return tables. How can i do both together.
Its like ;
CREATE or replace FUNCTION public."test" (INOUT "x" integer, INOUT "y" character varying(36))
RETURNS TABLE (
"id" integer,
"filesize" character varying(36)
)
AS $$
BEGIN
x=6;
RETURN QUERY
SELECT * FROM public."tbl_employees" ;
END;
$$ LANGUAGE plpgsql;
RETURNS TABLE (
"id" integer,
"filesize" character varying(36)
)
AS $$
BEGIN
x=6;
RETURN QUERY
SELECT * FROM public."tbl_employees" ;
END;
$$ LANGUAGE plpgsql;
I can not create that because of inout parameters.
Another place;
do $$
DECLARE b integer = 1;
DECLARE d integer = 2 ;
BEGIN
select * from public."test"();
END;
$$;
DECLARE b integer = 1;
DECLARE d integer = 2 ;
BEGIN
select * from public."test"();
END;
$$;
Anybody have an idea ?
İlyas Derse schrieb am 08.11.2019 um 09:18: > I'm trying to migration to PostgreSql from SQL Server. I have Stored Procedures what have output parameters and returntables. How can i do both together. > > CREATE or replace FUNCTION public."test" (INOUT "x" integer, INOUT "y" character varying(36)) > RETURNS TABLE ( > "id" integer, > "filesize" character varying(36) > ) > AS $$ > BEGIN > x=6; > RETURN QUERY > SELECT * FROM public."tbl_employees" ; > > END; > $$ LANGUAGE plpgsql; > > I can not create that because of inout parameters. > Another place; > > do $$ > DECLARE b integer = 1; > DECLARE d integer = 2 ; > BEGIN > select * from public."test"(); > END; > $$; > > Anybody have an idea ? Can't you just include the "out" parameters in the result? CREATE or replace FUNCTION public.test(x integer, y character varying(36)) RETURNS TABLE (id integer, filesize character varying(36), x integer, y varchar) AS $$ begin x := 42; y := 'foo'; RETURN QUERY SELECT t.*, x, y FROM public.tbl_employees t; END; It's different because x and y are repeated for every row, but that's the only thing I can think of.
On 11/8/19 12:18 AM, İlyas Derse wrote: > I'm trying to migration to PostgreSql from SQL Server. I have Stored > Procedures what have output parameters and return tables. How can i do > both together. Can you show an example of a SQL Server procedure that demonstrates what you want to achieve? > > Its like ; > > CREATE or replace FUNCTION public."test" (INOUT "x" integer, INOUT "y" > character varying(36)) > > RETURNS TABLE ( > "id" integer, > "filesize" character varying(36) > ) > AS $$ > BEGIN > x=6; > RETURN QUERY > SELECT * FROM public."tbl_employees" ; > > END; > $$ LANGUAGE plpgsql; > > I can not create that because of inout parameters. > Another place; > > do $$ > DECLARE b integer = 1; > DECLARE d integer = 2 ; > BEGIN > select * from public."test"(); > END; > $$; > > Anybody have an idea ? -- Adrian Klaver adrian.klaver@aklaver.com
On 11/13/19 11:58 PM, İlyas Derse wrote: Please reply to list also. Ccing list. > I want to do like this ; I can't make sense of the below. I don't see where "x" and "y" are used in the function, unless they supposed to be "id" and "filesize". I have no idea what the QUERY is doing? Pretty sure you don't want an unconstrained select on a table. Can you provide a working example of what you are doing in SQL Server with sample output from same? > > |CREATEorREPLACE FUNCTIONpublic."test"(INOUT "x"integer,INOUT > "y"text)RETURNS TABLE("id"integer,"filesize"character > varying(36))AS$$BEGINRETURNQUERY > SELECT*FROMpublic."tbl_employees";END;$$LANGUAGE plpgsql;| > > |I need to call table and inout parameters together at another place.| > > > Adrian Klaver <adrian.klaver@aklaver.com > <mailto:adrian.klaver@aklaver.com>>, 8 Kas 2019 Cum, 18:25 tarihinde > şunu yazdı: > > On 11/8/19 12:18 AM, İlyas Derse wrote: > > I'm trying to migration to PostgreSql from SQL Server. I have > Stored > > Procedures what have output parameters and return tables. How can > i do > > both together. > > Can you show an example of a SQL Server procedure that demonstrates > what > you want to achieve? > > > > > Its like ; > > > > CREATE or replace FUNCTION public."test" (INOUT "x" integer, > INOUT "y" > > character varying(36)) > > > > RETURNS TABLE ( > > "id" integer, > > "filesize" character varying(36) > > ) > > AS $$ > > BEGIN > > x=6; > > RETURN QUERY > > SELECT * FROM public."tbl_employees" ; > > > > END; > > $$ LANGUAGE plpgsql; > > > > I can not create that because of inout parameters. > > Another place; > > > > do $$ > > DECLARE b integer = 1; > > DECLARE d integer = 2 ; > > BEGIN > > select * from public."test"(); > > END; > > $$; > > > > Anybody have an idea ? > > > -- > Adrian Klaver > adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com> > -- Adrian Klaver adrian.klaver@aklaver.com