Vous n'êtes pas identifié(e).
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
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
Guillaume.
Hors ligne
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
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)
Guillaume.
Hors ligne