Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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
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