Thread: syntax error on Function return setoff

syntax error on Function return setoff

From
Garry Chen
Date:

Hi All,

                I have a working function that returns setoff record was created under porstgresql 9.6 but  when I try to create the same function under release 10 it gives me error type”recode” does not exist.  Therefore, I changed it to RETURNS SETOF table_name.column%varachar(7) I got syntax error.  Can anyone let me know the right syntax?

 

Thank you very much,

Garry

Re: syntax error on Function return setoff

From
"David G. Johnston"
Date:

On Friday, January 26, 2018, Garry Chen <gc92@cornell.edu> wrote:

Hi All,

                I have a working function that returns setoff record was created under porstgresql 9.6 but  when I try to create the same function under release 10 it gives me error type”recode” does not exist.  Therefore, I changed it to RETURNS SETOF table_name.column%varachar(7) I got syntax error.  Can anyone let me know the right syntax?

AFAIK there is nothing changed between 9.6 and 10 that should affect this.  Providing the complete create function statement (you can probably replace the body string with raise notice or something similar) would be helpful, but "recode" is an odd, and custom, type name...

As for the spec using "%", the point of it is to infer the data type from the named column, which means you shouldn't actually have a data type name (i.e., varchar) in the expression.  The text TYPE in the docs are the literal characters TYPE, not a syntax placeholder.  The difference is the "table.column" are in italics while "%TYPE" is not.

David J.

Re: syntax error on Function return setoff

From
Andreas Kretschmer
Date:
On 26 January 2018 19:39:27 CET, Garry Chen <gc92@cornell.edu> wrote:
>Hi All,
>I have a working function that returns setoff record was created under
>porstgresql 9.6 but  when I try to create the same function under
>release 10 it gives me error type”recode” does not exist.  Therefore, I
>changed it to RETURNS SETOF table_name.column%varachar(7) I got syntax
>error.  Can anyone let me know the right syntax?
>
>Thank you very much,
>Garry


Maybe a typo? "recode" is wrong...

Can you show the function-definition?


Regards, Andreas


--
2ndQuadrant - The PostgreSQL Support Company


Re: syntax error on Function return setoff

From
Garry Chen
Date:
Here is the short/simple function in postgresql 9.6.

CREATE OR REPLACE FUNCTION public.sec_select_labor_data(
    )
    RETURNS SETOF acct_nbr_lst 
    LANGUAGE 'plpgsql'

AS $BODY$
Declare
     v_cnt        numeric;
     sec_role     varchar(20);
     v_netid      varchar(30);
begin

    RETURN QUERY Select acct_nbr from kdw_acct_security where lower(netid) = CURRENT_USER;

end;

$BODY$;


Re: syntax error on Function return setoff

From
Andreas Kretschmer
Date:

Am 26.01.2018 um 20:01 schrieb Garry Chen:
> Here is the short/simple function in postgresql 9.6.
>
> CREATE OR REPLACE FUNCTION public.sec_select_labor_data(

works for me, in 9.6 and 10. first i create a new table (and impliciet 
the typ acct_nbr_lst)

test=# create table acct_nbr_lst (i int);
CREATE TABLE
test=*# CREATE OR REPLACE FUNCTION public.sec_select_labor_data(
test(#  )
test-#     RETURNS SETOF acct_nbr_lst
test-#     LANGUAGE 'plpgsql'
test-#
test-# AS $BODY$
test$# Declare
test$#      v_cnt        numeric;
test$#      sec_role     varchar(20);
test$#      v_netid      varchar(30);
test$# begin
test$#
test$#     RETURN QUERY Select acct_nbr from kdw_acct_security where 
lower(netid) = CURRENT_USER;
test$#
test$# end;
test$#
test$# $BODY$;
CREATE FUNCTION
test=*#


works in 9.6 and 10.


Regards, Andreas

-- 
2ndQuadrant - The PostgreSQL Support Company.
www.2ndQuadrant.com



Re: syntax error on Function return setoff

From
Garry Chen
Date:
Hi Andreas,
    Thank you very much for your reply.  Very strange, in 9.6 the function created/compiled successful  without the
tablecalled "acct_nbr_lst".  But in release 10 this table "acct_nbr_lst" must exist in order to create/compiled this
function.  In RDBMS function/procedure coding principal, I don’t know which one is the correct way.  Is there any
Postgresqldocuments that states/mentation the prerequisite about the SETOF?   Once again thank you very much for your
help.

Garry

On 1/27/18, 5:35 AM, "Andreas Kretschmer" <andreas@a-kretschmer.de> wrote:

    
    
    Am 26.01.2018 um 20:01 schrieb Garry Chen:
    > Here is the short/simple function in postgresql 9.6.
    >
    > CREATE OR REPLACE FUNCTION public.sec_select_labor_data(
    
    works for me, in 9.6 and 10. first i create a new table (and impliciet 
    the typ acct_nbr_lst)
    
    test=# create table acct_nbr_lst (i int);
    CREATE TABLE
    test=*# CREATE OR REPLACE FUNCTION public.sec_select_labor_data(
    test(#  )
    test-#     RETURNS SETOF acct_nbr_lst
    test-#     LANGUAGE 'plpgsql'
    test-#
    test-# AS $BODY$
    test$# Declare
    test$#      v_cnt        numeric;
    test$#      sec_role     varchar(20);
    test$#      v_netid      varchar(30);
    test$# begin
    test$#
    test$#     RETURN QUERY Select acct_nbr from kdw_acct_security where 
    lower(netid) = CURRENT_USER;
    test$#
    test$# end;
    test$#
    test$# $BODY$;
    CREATE FUNCTION
    test=*#
    
    
    works in 9.6 and 10.
    
    
    Regards, Andreas
    
    -- 
    2ndQuadrant - The PostgreSQL Support Company.
    www.2ndQuadrant.com
    
    
    


Re: syntax error on Function return setoff

From
"David G. Johnston"
Date:
On Mon, Jan 29, 2018 at 6:42 AM, Garry Chen <gc92@cornell.edu> wrote:
Hi Andreas,
        Thank you very much for your reply.  Very strange, in 9.6 the function created/compiled successful  without the table called "acct_nbr_lst".  But in release 10 this table "acct_nbr_lst" must exist in order to create/compiled this function.   In RDBMS function/procedure coding principal, I don’t know which one is the correct way.  Is there any Postgresql documents that states/mentation the prerequisite about the SETOF?   Once again thank you very much for your help.

​Anything outside of the string-literal function body (which includes the RETURNS clause) has to exist and is recorded as a dependency.  The material within a function body usually (not sure if/when expections...) is not required to exist and is not recorded as a dependency.​

David J.