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 Re : PL/pgSQL » fonction pl gsql » 07/06/2011 10:45:16

Mon application c'est pour un projet à la fac donc pour le moment ça c'est pas bien grave les failles de sécurité, mais merçi pour vos conseil car c'est vrai que je n'avais pas pensé aux injections sql.

#2 Re : PL/pgSQL » fonction pl gsql » 07/06/2011 10:36:40

vous m'avez pas compris j'avais just posté la partie qui marchait pas mais  pas tout le code pour aller plus vite mais bon, j'ai lu la doc sur votre lien assez rapidement faute de temps mais pour mon erreur je sais pas quoi faire

#3 Re : PL/pgSQL » fonction pl gsql » 07/06/2011 10:31:43

pour ètre plus précis voila ma fonction

CREATE OR REPLACE FUNCTION test_multivaluate_dependancy(

left_attribut character varying,

right_attribut character varying,

val character varying,

val1 character varying,



tab character varying

)

returns integer as $$



DECLARE





i integer:=1 ;

i1 integer ;

bool boolean:=true ;

lio character varying;



BEGIN

	--EXECUTE 'select ' || left_attribut || '  from '||tab||' where ' ||right_attribut||  '=' || quote_literal(val)

	--into lio; 

		EXECUTE 'select '|| left_attribut || ' from ' ||tab||' where ' ||right_attribut||  '=' || quote_litera(val)
		||' and ' ||left_attribut||  '=' || quote_literal(val1) offset 1 limit 1

		into lio;

		--select * from tab offset 1 limit 1;

		return i;

END;

$$LANGUAGE 'plpgsql' 

SECURITY DEFINER;

#4 Re : PL/pgSQL » fonction pl gsql » 07/06/2011 10:25:30

non c'est des variables , c'est les paramètres de ma fonctions(x,y,val)

#5 Re : PL/pgSQL » fonction pl gsql » 07/06/2011 10:24:21

c'est le offset qui pose problème car lorsque je l'utilise dans une requète non dynamique donc sans execute ça marche.

#7 Re : PL/pgSQL » fonction pl gsql » 07/06/2011 10:17:53

j'ai une erreur du type l'argument de l'execute est null
merci pour vos réponses.

#8 Re : PL/pgSQL » fonction pl gsql » 07/06/2011 10:16:52

ok, j'ai un autre soucis
quand je met un offset dans ma requète dynamique j'ai une erreur

execute 'select'  || x|| 'from' 'tab' where 'y' '=' quote_literal(val) offset 1 LIMIT 1 into c;

#9 Re : PL/pgSQL » fonction pl gsql » 03/06/2011 13:35:31

effectivement,
le || sert à quoi au faite, jai pas bien compris car j'ai pas vraiment eu le tps de lire les doc
mais je croi savoir que l'on l'utilise pr faire savoir au code que l'on utilise des paramètre dynamique, c'est bien ça?

#10 Re : PL/pgSQL » fonction pl gsql » 03/06/2011 13:24:06

pourtant ça marché qd j'enlève la partie  " and ' ||left_attribut||  '=' || quote_literal(val1) "

#11 Re : PL/pgSQL » fonction pl gsql » 03/06/2011 13:22:47

erreur: le type quote literal n'existe pas

#12 Re : PL/pgSQL » fonction pl gsql » 03/06/2011 13:07:42

Bonjour, j'ai essaye ce code mais ça marche pas

		EXECUTE 'select count('|| left_attribut ||') from ' ||tab||' where ' ||right_attribut||  '=' || quote_literal(val)

		' and ' ||left_attribut||  '=' || quote_literal(val1)

		into i;

sans ' and ' ||left_attribut||  '=' || quote_literal(val1) ça marche mais qd je rajoute la partie du and j'ai une erreur du type le quote_literal n'existe pas

es -ce que quelqu'un aurrai une réponse
merçi

#13 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 16:44:23

pffff oui c'était bien cela le E, ben merçi bien.

#15 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 16:26:17

avec les balises c'est mieux lol

EXCUTE 'select count('|| left_attribut ||') from film where acteur = "cameron"';

#16 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 16:24:08

maintenant je voudrai faire un select count() et avec un attribut dans mon count. j'ai essayé :
EXCUTE 'select count('|| left_attribut ||') from film where acteur = "cameron"';

mais rien à faire.
es ce que vous avez une solution? Dans les tutos que j'ai lu j'ai rien trouvé.
Merçi.

#17 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 16:20:54

Merçi ca marche voilà la bonne syntaxe

CREATE OR REPLACE FUNCTION multivaluate_dependancy(

left_attribut character varying,

right_attribut character varying,

val character varying,

tab character varying

)

returns boolean as $$



DECLARE



i integer ;

i1 integer ;

bool boolean:=true ;

lio character varying;



BEGIN

    EXECUTE 'select ' || left_attribut || '  from '||tab||' where ' ||right_attribut||  '=' || quote_literal(val)

    into lio;

    --EXCUTE 'select count('|| left_attribut ||') from film where acteur = "cameron"';

        return bool;

END;

$$LANGUAGE 'plpgsql'

SECURITY DEFINER;

#18 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 14:54:42

ok la fonction quote_literal() est prédéfinie ds postgree?

#19 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 14:34:27

ca ne marche pas non plus javais déja essayé cela mais il considère "Cameron " comme une colonne

#20 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 00:30:26

comment faire pour indiquer à la requète que "cameron" doit ètre une valeur d'attribut mais pas un attrbut?

#21 Re : PL/pgSQL » fonction pl gsql » 31/05/2011 00:24:49

ok, mais qd je fait ça après j'ai une erreur du type la colnne <<cameron>> n'existe pas pourtant cameron est valeur d'attribut
merçi.

#22 Re : PL/pgSQL » fonction pl gsql » 30/05/2011 22:25:51

l'opérateur n'existe pas : text ||

#23 PL/pgSQL » fonction pl gsql » 30/05/2011 20:26:57

lioneleder
Réponses : 39

Bonjour
j'essai en fait de d'crire une fonction qui prend en paramètre deux attirbuts et ses valeurs et un nom de table sans succès.
Ma fonction doit effectuer des recherches en fonction de ces paramètres
Comment faire ?
Merçi


CREATE OR REPLACE FUNCTION multivaluate_dependancy(

left_attribut character varying,

right_attribut character varying,

tab character varying

)

returns boolean as $$



DECLARE



i integer ;

i1 integer ;

bool boolean:=true ;

lio character varying;



BEGIN

    EXECUTE 'select ' || left_attribut || ' into lio from '||tab||' where' ||right_attribut|| = 'cameron';

        return bool;

END;

$$LANGUAGE 'plpgsql'

SECURITY DEFINER;

Pied de page des forums

Propulsé par FluxBB