Hi

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


>
> 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
>>
>>

Reply via email to