Re: Procedure support improvements

Dave Cramer <[email protected]> Tue, 23 Jul 2019 16:37:27 -0400
Newsgroups gmane.comp.db.postgresql.jdbc
Message-ID <CADK3HHKMK8VsxQhkZG+uq3fP0eVwZ3r2aNs_QzFtY4e-jkRq7g@mail.gmail.com>
Hmmm who knew you couldn't call a procedure inside a transaction. That just
seems broken


Dave Cramer

[email protected]
www.postgresintl.com


On Sun, 21 Jul 2019 at 13:31, David Rader <[email protected]> wrote:

> Hello -
>
> Since Procedures were introduced in PG 11, the workaround to invoke them
> with JDBC is to send the native "CALL proc()" SQL and let it be treated as
> a SQL statement, not a specific stored routine invocation.
>
> 1) When using transaction control inside the stored proc, an exception is
> generated if autoCommit is false - see example code attached.
> Exception in thread "main" org.postgresql.util.PSQLException: ERROR:
> invalid transaction termination
>
> 2) Output parameters are not mapped as parameters, and app code cannot use
> registerOutputParameter or getInt() style retrieval. Instead, outputs are
> left in the result set and app code must retrieve the result and pull,
> creating a big difference between how Procedures and Functions are invoked.
>
> I propose improving support for procedures. Either:
> (1) add support for "CALL proc()" to be treated as a routine invocation so
> that output parameters can be registered, no begin transaction is silently
> sent from driver, and calling a procedure and calling a function would be
> very similar (only differing in function still using the {call} escape
> syntax.
> or
> (2) change the {call} syntax to optionally support procedures. {? = call}
> would still be mapped to functions. Add a connection setting to control
> this change, and make default false, so that default stays backwards
> compatible with pre pg11 functionality.
>
> Thoughts?
>
>
>
>
>