Why the error happen is clear to me, in the example is also easy to see that the 7th parameter is the problem. But I'm searching a more general way to find easily which of the parameter is the problem. Suppose you have a function with 30 parameters with mixed sort of types. They only way I know right now is to compare the position, name and type one parameter after the other until I found the one that do not match. A sort of brute force. Is there any better way to do that?
Thanks On Mon, Jan 16, 2023 at 5:21 PM Adrian Klaver <adrian.kla...@aklaver.com> wrote: > On 1/16/23 08:17, Adrian Klaver wrote: > > On 1/16/23 08:04, arons wrote: > >> Dear All, > >> I'm facing a general problem and I'm looking the best, fastest, way > >> how to identify the problem and solve it. > >> > >> As example assume we have a function like that: > >> > >> CREATE OR REPLACE FUNCTION testBinding01 ( > >> > >> p_in01 bigint, > >> > >> p_in02 bigint, > >> > >> p_in03 bigint, > >> > >> p_in04 bigint, > >> > >> p_in05 bigint, > >> > >> p_in06 bigint, > >> > >> p_text7 text > >> > >> ) RETURNS text > >> > >> LANGUAGE sql > >> > >> AS $$ > >> > >> select 'ciao'; > >> > >> $$; > >> > >> > >> > >> I can call the function in some of the variant below: > >> > >> select testBinding01(1,2,3,4,5,6,7); > >> > >> select testBinding01(p_in01 => 1,p_in02 => 2,p_in03 => 3,p_in04 => > >> 4,p_in05 => 5,p_in06 => 6,p_text7 => 7); > >> > >> select testBinding01(p_in01 => 1,p_in02 => 2,p_in03 => 3,p_in04 => > >> 4,p_in05 => 5,p_in06 => 6,p_text9 => 'some txt'); > >> > >> > >> All of the above, produce the error: > >> > >> *No function matches the given name and argument types.* > > > > In psql what does: > > > > \df test* > > > > return for the function name. > > > > I'm going to guess it might be testBinding01, in other words mixed case. > > > > Have you tried?: > > > > select "testBinding01"(1,2,3,4,5,6,7); > > Forget the above. Instead: > > select testBinding01(1,2,3,4,5,6,7); > ERROR: function testbinding01(integer, integer, integer, integer, > integer, integer, integer) does not exist > LINE 1: select testBinding01(1,2,3,4,5,6,7); > > > select testBinding01(1,2,3,4,5,6,'7'); > > testbinding01 > --------------- > ciao > > The complete error shows what the function is receiving, all integers > when it needs a text parameter for the last value. > > >> * > >> * > >> * > >> * > >> * > >> * > >> My question is: how is the best way to identify the problem? > >> > >> Is a parameter name? is a parameter type? is the function name? > >> > >> An especially in case is a parameter type how is the easy way to > >> identify which parameter is causing the problem? > >> > >> In case a function has a lot of parameters (and in even worst case has > >> some overloading) going trough all parameters to check its type/name > >> costs a lot of time. > >> > >> > >> Thanks for any help > >> > >> Renzo > >> > >> > >> > > > > -- > Adrian Klaver > adrian.kla...@aklaver.com > >