Re: No function matches the given name and argument types.

2023-01-16 Thread Christophe Pettus



> On Jan 16, 2023, at 09:53, David G. Johnston  
> 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 closest function signatures that are 
> present".

I can see a use-case for such functionality, though: A "did you mean?" error 
message.



Re: No function matches the given name and argument types.

2023-01-16 Thread David G. Johnston
On Mon, Jan 16, 2023 at 10:42 AM arons  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.


Re: No function matches the given name and argument types.

2023-01-16 Thread Pavel Stehule
Hi

po 16. 1. 2023 v 18:42 odesílatel arons  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


>
> Thanks
>
>
> On Mon, Jan 16, 2023 at 5:21 PM Adrian Klaver 
> 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
>>
>>


Re: No function matches the given name and argument types.

2023-01-16 Thread arons
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 
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
>
>


Re: No function matches the given name and argument types.

2023-01-16 Thread Adrian Klaver

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





Re: No function matches the given name and argument types.

2023-01-16 Thread Adrian Klaver

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.kla...@aklaver.com