Обсуждение: No function matches the given name and argument types.
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.
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
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); > * > * > * > * > * > * > 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.klaver@aklaver.com
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.klaver@aklaver.com
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.klaver@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.klaver@aklaver.com
Hi
po 16. 1. 2023 v 18:42 odesílatel arons <arons7@gmail.com> napsal:
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?
Unfortunately, it isn't or I don't know it
Regards
Pavel
ThanksOn Mon, Jan 16, 2023 at 5:21 PM Adrian Klaver <adrian.klaver@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.klaver@aklaver.com
On Mon, Jan 16, 2023 at 10:42 AM arons <arons7@gmail.com> wrote:
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?
To what end?
In most cases you already know precisely which function you are trying to execute. Comparing that single function against your call site and figuring out what is wrong is fairly simple debugging work.
I don't see any good way to say: "given this function signature, and the fact it cannot be found, what are the next closest function signatures that are present".
David J.
> On Jan 16, 2023, at 09:53, David G. Johnston <david.g.johnston@gmail.com> wrote: > > I don't see any good way to say: "given this function signature, and the fact it cannot be found, what are the next closestfunction signatures that are present". I can see a use-case for such functionality, though: A "did you mean?" error message.