Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 19/09/2016 23:38:06
- Mlan2
- Membre
Erreur d'exécution EXECUTE
Bonjour,
Ci-dessous, une erreur d'exécution obtenue lors de l'invocation de la fonction : EXECUTE, dont je ne vois pas la cause :
$$
DECLARE
r record;
user_name VARCHAR (255);
schema_name VARCHAR (255);
BEGIN
user_name := 'decatn';
schema_name := 's_etptabe';
FOR r IN SELECT p.proname, p.proowner, p.pronamespace
FROM pg_proc p
WHERE (p.proowner = (select u.usesysid
from pg_user u
where (u.usename = user_name)))
AND (p.proowner = (select nspowner
From pg_namespace
Where (nspname = schema_name)))
LOOP
EXECUTE 'ALTER FUNCTION ' || quote_ident(schema_name) || '.' || quote_ident(r.proname) || ' SET SCHEMA public;';
END LOOP;
END;
$$
Message obtenu :
ERREUR: erreur de syntaxe sur ou près de « SET »
LINE 1: ALTER FUNCTION s_etptabe.inst_wepal SET SCHEMA public;
^
QUERY: ALTER FUNCTION s_etptabe.inst_wepal SET SCHEMA public;
CONTEXT: fonction PL/pgsql inline_code_block, ligne 19 à instruction EXECUTE
********** Erreur **********
ERREUR: erreur de syntaxe sur ou près de « SET »
État SQL :42601
Contexte : fonction PL/pgsql inline_code_block, ligne 19 à instruction EXECUTE
Le message est peu explicite.
Avez-vous une idée de la cause de l'erreur ?
D'avance merci, de votre retour.
Hors ligne
#2 20/09/2016 08:42:38
- Mlan2
- Membre
Re : Erreur d'exécution EXECUTE
Il manque le DO en début du bloc de code fourni en exemple.
Après quelques recherches complémentaires, l'erreur produite viendrait de l'absence des paramètres fournis entre parenthèses de la fonction.
D'une manière générale, quelle serait le code pour fournir la chaine de caractères correspondant aux paramètres de la fonction ?
D'avance merci de votre retour.
Hors ligne
#3 20/09/2016 13:56:10
- gleu
- Administrateur
Re : Erreur d'exécution EXECUTE
L'erreur vient évidemment du manque des arguments. La seule façon d'identifier une fonction avec PostgreSQL est de fournir son nom et les types de ses arguments, vu qu'il est possible d'avoir plusieurs fonctions de même nom.
Quant au code, le plus simple est de récupérer les noms des types dans pg_type, une fois récupéré la liste des identifiants de type avec la colonne proargtypes de pg_proc.
Guillaume.
Hors ligne
#4 20/09/2016 14:36:10
- Mlan2
- Membre
Re : Erreur d'exécution EXECUTE
Merci de l'information.
Comment implémenter le code pour fabriquer la chaine de caractères correspondant au type de chacun des paramètres de la fonction ?
Dans mon exemple, une fonction a une liste de paramètres :
SELECT p.proargtypes
FROM pg_proc p
where (p.proname = 'Ma_fonction')
"1043 1043 25 25 25 1114 1043 1043 1043 23 1043 23"
select typname, typelem from pg_type
where (typelem in (1043, 23, 25, 1114));
"_int4";23
"_text";25
"_varchar";1043
"_timestamp";1114
Quand j'observe les types de paramètres liés à mon exemple de fonction, j'obtiens des valeurs différentes de celles obtenues dans la table pg_type pour les valeurs rencontrées.
IN namefile character varying,
IN buff_err character varying,
IN buff_pg1 text,
IN buff_pg2 text,
IN buff_pg3 text,
IN dat_trt timestamp without time zone,
IN mod_trt character varying,
IN num_j character varying,
IN nam_l character varying,
INOUT nb_l integer,
IN nam_i character varying,
INOUT nb_i integer)
Aussi, quelles sont les valeurs de types de paramètres à utiliser pour identifier la fonction ?
Un exemple de code pour l'obtenir ?
D'avance merci de votre réponse.
Hors ligne
#5 20/09/2016 15:02:23
- rjuju
- Administrateur
Re : Erreur d'exécution EXECUTE
Vous pouvez utiliser la fonction pg_get_function_arguments() avec en paramètre l'oid de la fonction en question.
Julien.
https://rjuju.github.io/
Hors ligne
#6 20/09/2016 16:02:11
- Mlan2
- Membre
Re : Erreur d'exécution EXECUTE
Comment récupérer l'oid d'une fonction ?
Celui-ci n'est pas présent dans la table pg_proc.
Hors ligne
#7 20/09/2016 17:18:17
- arthurr
- Membre
Re : Erreur d'exécution EXECUTE
Bonjour,
select pg_get_function_arguments(p.oid),p.proname, p.proowner, p.pronamespace from pg_proc p where p.proname='NOM_DE_LA_FONCTION';
Hors ligne
#8 05/11/2016 20:46:00
- ASarahh
- Membre
Re : Erreur d'exécution EXECUTE
Je suis tombé sur un problème très proche.
Merci pour vos solutions qui m'ont permis de trouver mes erreurs
Hors ligne
Pages : 1