Обсуждение: BUG #16547: ECPG can't CALL the procedure which has INOUT parameter
The following bug has been logged on the website: Bug reference: 16547 Logged by: yusuke egashira Email address: egashira.yusuke@jp.fujitsu.com PostgreSQL version: 11.8 Operating system: Red Hat Enterprise Linux Server release 6.10 Description: I created the procedure with INOUT parameter as : CREATE OR REPLACE PROCEDURE inout_proc(a in int, b inout int) LANGUAGE plpgsql AS $$ BEGIN b = a + b; RETURN; END; $$; If I called it in ECPG by "EXEC SQL CALL inout_proc(1,2);", "SQL error: too few arguments on line xx" is caused. On the other hand, if the procedure don't have INOUT parameter (IN only), "EXEC SQL CALL inout_proc(1,2);" statement succeeded. This error seems to occur because ECPG doesn't expect the value to be returned by CALL statement. Is this a bug? Or, is the current version limited to calling procedures with INOUT parameters from ECPG? I found this behavior in PostgreSQL 11.8 and 12.3. Also, I found the patch[1] introducing "INTO" clause in CALL of ECPG. However, the patch changes the EXC SQL CALL statement to always require INTO clause. [1] https://www.postgresql.org/message-id/CAE9k0P%3DGQFjfy9jHCPDw4Eh_xE%3DNw%3D9y4f-CuTZp1L%2B6vEHwFg%40mail.gmail.com
On Tue, Jul 21, 2020 at 07:44:54AM +0000, PG Bug reporting form wrote: > The following bug has been logged on the website: > > Bug reference: 16547 > Logged by: yusuke egashira > Email address: egashira.yusuke@jp.fujitsu.com > PostgreSQL version: 11.8 > Operating system: Red Hat Enterprise Linux Server release 6.10 > Description: > > I created the procedure with INOUT parameter as : > CREATE OR REPLACE PROCEDURE inout_proc(a in int, b inout int) > LANGUAGE plpgsql AS $$ > BEGIN > b = a + b; > RETURN; > END; > $$; > > If I called it in ECPG by "EXEC SQL CALL inout_proc(1,2);", "SQL error: too > few arguments on line xx" is caused. > > On the other hand, if the procedure don't have INOUT parameter (IN only), > "EXEC SQL CALL inout_proc(1,2);" statement succeeded. > > This error seems to occur because ECPG doesn't expect the value to be > returned by CALL statement. > Is this a bug? > Or, is the current version limited to calling procedures with INOUT > parameters from ECPG? > > I found this behavior in PostgreSQL 11.8 and 12.3. > > > Also, I found the patch[1] introducing "INTO" clause in CALL of ECPG. > However, the patch changes the EXC SQL CALL statement to always require INTO > clause. > > [1] > https://www.postgresql.org/message-id/CAE9k0P%3DGQFjfy9jHCPDw4Eh_xE%3DNw%3D9y4f-CuTZp1L%2B6vEHwFg%40mail.gmail.com This looks like something we should either fix or document. Michael Meskes, do you have an opinion? -- Bruce Momjian <bruce@momjian.us> https://momjian.us EnterpriseDB https://enterprisedb.com The usefulness of a cup is in its emptiness, Bruce Lee
On Sat, Aug 22, 2020 at 05:52:23PM +0200, Michael Meskes wrote: > > > ... > > > Also, I found the patch[1] introducing "INTO" clause in CALL of > > > ECPG. > > > However, the patch changes the EXC SQL CALL statement to always > > > require INTO > > > clause. > > > > > > [1] > > > https://www.postgresql.org/message-id/CAE9k0P%3DGQFjfy9jHCPDw4Eh_xE%3DNw%3D9y4f-CuTZp1L%2B6vEHwFg%40mail.gmail.com > > > > This looks like something we should either fix or document. Michael > > Meskes, do you have an opinion? > > Yes, I think it should definitely be fixed. In fact I was looking into > it and iirc the patch mentioned had a couple issues but could be a good > base for the fix. Unfortunately I have not found the time yet to take > care of it. > > So in short, hopefully we can fix it shortly. Thank you. I am glad you are aware of it. -- Bruce Momjian <bruce@momjian.us> https://momjian.us EnterpriseDB https://enterprisedb.com The usefulness of a cup is in its emptiness, Bruce Lee