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 01/04/2011 11:41:18

pauline39
Membre

migration oracle erreur expression de la fonction du FROM

j'ai le message suivant
ERREUR: l'expression de la fonction du FROM ne peut pas faire référence à d'autres
relations sur le même niveau de la requête
État SQL :42P10
Caractère : 26
est_il possbible de contourner

requete:

select * from a,b(a.col1) where a.col1 like '%XXX%'

en oracle on avait

select * from a,table(b(a.col1)) where a.col1 like '%XXX%'

merci pour vos réponses

Hors ligne

#2 01/04/2011 14:09:15

Marc Cousin
Membre

Re : migration oracle erreur expression de la fonction du FROM

Bonjour,

Pour avancer, c'est quoi, b, dans cette expression ? Une fonction retournant un setof ?


Marc.

Hors ligne

#3 01/04/2011 14:15:15

pauline39
Membre

Re : migration oracle erreur expression de la fonction du FROM

oui c'est une fonction qui renvoie un setof d'un objet
CREATE OR REPLACE FUNCTION b(x character varying)
  RETURNS SETOF c_object AS
$BODY$
BEGIN
    RETURN QUERY SELECT getItem_id::varchar(30), model_id, CAST(item_id AS varchar(30)), item_family_id, manager_id, local_manager_id,
        unit_code_id, decimal_size, internal_cost_qty, bom_qty,
        title_percent, bom_level, model_marketable, technical_index,
        current_index, customs_code, item_state, kit
        FROM model, getitem_id(x) WHERE model_id = getmodel(x);
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;

Hors ligne

#4 01/04/2011 14:25:08

Marc Cousin
Membre

Re : migration oracle erreur expression de la fonction du FROM

Dans ce cas, je présume que voulez faire un produit cartésien entre a et b(un enregistrement de a) ? La syntaxe est effectivement bizarre (et ça ne m'étonnerait pas que ça ne soit pas autorisé SQL, même si je n'en suis pas sûr).

Bref, est ce que :

SELECT *,b(test.a) from test;

Est ce que vous souhaitez ?


Marc.

Hors ligne

#5 01/04/2011 14:31:47

pauline39
Membre

Re : migration oracle erreur expression de la fonction du FROM

oui mais dans ce cas je n'arrive pas à utiliser les colonnes de ma fonction

Hors ligne

#6 01/04/2011 14:36:48

Marc Cousin
Membre

Re : migration oracle erreur expression de la fonction du FROM

Utiliser ? Vous voulez dire qu'ils sont dans un champ composite ?


Marc.

Hors ligne

#7 01/04/2011 14:40:20

pauline39
Membre

Re : migration oracle erreur expression de la fonction du FROM

si vous voulez quand je fais select * from test('AAA') j'obtiens un resultat sous forme de colonne correspondant à mon return
si je fais select test('AAA') j'obtiens le debut du resultat precedé par une paranthèse

Hors ligne

#8 01/04/2011 14:46:54

ioguix
Administrateur

Re : migration oracle erreur expression de la fonction du FROM

normalement, avec une fonction SRF, la syntaxe suivante retourne tout le résultat dans un seul champs effectivement:

  SELECT function (...)

Si vous voulez que chaque champs du type composite soit dans une colonne propre, utilisez la syntaxe suivante:

  SELECT (function (...)).*;

Soit, avec l'exemple de Marc:

  SELECT a.*, (b(test.a)).* from test;

Hors ligne

#9 01/04/2011 14:52:44

pauline39
Membre

Re : migration oracle erreur expression de la fonction du FROM

ok merci  beaucoup . je n'avais pas trouvé la syntaxe dans la doc

Hors ligne

#10 01/04/2011 14:53:33

Marc Cousin
Membre

Re : migration oracle erreur expression de la fonction du FROM

Tu m'ôtes les mots de la bouche smile

Histoire d'expliquer quand même la solution, un type composite, comm, c_object, c'est "comme un enregistrement de table", donc on peut faire un .* dessus. Les parenthèses, c'est parce que sinon, l'analyseur syntaxique ne saurait pas, dans «b(test.a).*» sur quoi appliquer le .*


Marc.

Hors ligne

Pied de page des forums