From: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> |
---|---|
To: | Lorusso Domenico <domenico(dot)l76(at)gmail(dot)com>, pgsql-general(at)lists(dot)postgresql(dot)org |
Subject: | Re: Dynamic binding issue |
Date: | 2023-06-12 23:31:44 |
Message-ID: | 6cef623d-782c-913b-7c9e-6e9be3b0e6d8@aklaver.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 6/12/23 15:13, Lorusso Domenico wrote:
> Hello guys,
> I'm a problem with dynamic sql.
> I am trying to write a generic function that is able to read and update
> a table based on some data coming from e previous record.
> Here the example
> _sqlStr=format('select *
> from %1$s.%2$s
> where (' || array_to_string(_activeRec.pk_columns_list, ',') || ') in
> (select ' ||
> 'row($1[''' || array_to_string(_activeRec.pk_columns_list,
> '''],$1[''') || ''']))'
> , _activeRec.name_of_schema, _activeRec.main_table);
>
> execute _sqlStr using oldRec into _rec;
>
> My problem is oldRec is a type record, so the substitution performed by
> execute fails, because it can't recognize the field if the variable is
> record and not a specific composite record type.
Why not use a row type?:
https://www.postgresql.org/docs/current/plpgsql-declarations.html#PLPGSQL-DECLARATION-ROWTYPES
>
> I suppose this is a recurrent question, but I can't find a solution...
>
> --
> Domenico L.
--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | Merlin Moncure | 2023-06-13 02:49:14 | Re: Question about where to deploy the business logics for data processing |
Previous Message | Lorusso Domenico | 2023-06-12 22:13:43 | Dynamic binding issue |