PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 29/03/2017 18:46:30

Majid Haitami
Membre

HINT: No function matches the given name and argument types. You migh

Bonjour,

J'ai un souci avec l'appel d'une fonction qui me retourne le message cité en objet.

Ma fonction est déclarée comme suit :

CREATE OR REPLACE  FUNCTION crypto_1 (    p_data                                 text,
                                p_key                                text,
                                p_processing_mode                        integer,
                                p_cypher_mode                            integer,
                                p_compress_mode                        integer,
                                p_compress_level                        integer,
                                p_datainout                            integer,
                            out   p_return_status                            integer,
                            out   p_result                                text)

L'appel se fait avec les arguments suivants :

    select crypto_1          (    v_data,
                        v_key,
                        v_encrypt,
                        v_cypher_mode,
                        v_compress_mode,
                        v_compress_level,
                        v_datainout,
                        v_return_status,
                        v_tagdata);

Sachant que les données passées en argument sont déclarées de même type que les données de la fonction appelée :


    v_data                         text;
    v_key                        text;
    v_encrypt                            integer := 0;
    v_cypher_mode                    integer := 0;
    v_compress_mode                integer := 0;
    v_compress_level                integer := 0;   
        v_datainout                    integer := 0;   
        v_return_status                    integer;
    v_tagdata                        text;

ERROR:  function crypto_1(text, text, integer, integer, integer, integer, integer, integer, text) does not exist
LINE 1: select crypto_1 ( v_data::text ,
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Est-ce que quelqu'un a une idée sur le problème et comment le résoudre ?

Hors ligne

#2 29/03/2017 21:52:27

gleu
Administrateur

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

PostgreSQL a raison (comme très souvent). Cette fonction n'existe pas. La fonction qui existe est crypto_1(text, text, integer, integer, integer, integer, integer). Oui, vous avez déclaré une fonction avec 9 arguments, mais les deux derniers sont des arguments en sortie (mode out). La fonction doit donc s'appeler sans les deux arguments out, et la fonction renverra les deux arguments en résultat. Le plus simple est certainement de regarder les exemples sur http://docs.postgresql.fr/9.6/sql-createfunction.html

Hors ligne

#3 02/04/2017 03:12:28

Majid Haitami
Membre

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

Merci beaucoup Guillaume. J'avais oublié que je n'étais plus sous PL/SQL.
Pourrais-je solliciter votre aide encore sur le problème suivant ? :

select * from decode(encode (';àavdeyqkjuhdezyug','hex'),'hex') : Je suis sensé avoir la même chaine en retour mais je vois que ce n'est pas le cas.

";\303\240avdeyqkjuhdezyug"

Comment puis-je résoudre ce problème ?

Hors ligne

#4 02/04/2017 15:38:08

gleu
Administrateur

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

Pour une question qui n'a rien à voir avec le premier sujet, merci de créer une autre discussion.

Concernant votre question, vous êtes sensé récupérer la même chaîne pour le type de données bytea. Et c'est bien ce que vous récupérez. Moi, je récupère une chaîne hexa, vous une chaîne octale parce qu'on ne doit pas avoir la même configuration pour le paramètre byte_output :

postgres=# set bytea_output to hex;
SET
postgres=# select decode(encode (';àavdeyqkjuhdezyug','hex'),'hex');
                  decode                  
------------------------------------------
 \x3bc3a06176646579716b6a756864657a797567
(1 row)

postgres=# set bytea_output to escape;
SET
postgres=# select decode(encode (';àavdeyqkjuhdezyug','hex'),'hex');
          decode           
---------------------------
 ;\303\240avdeyqkjuhdezyug
(1 row)

Hors ligne

Pied de page des forums