Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J’ai une requête qui s’exécute correctement sur une machine et sur l’autre elle affiche le message d’erreur
Select Error: ORA-01422: exact fetch returns more than requested number of rows
Malgré que les deux se connectent sur la même base.
le requête est de type
select a,b, (select g into x from table) c from tables
L’affichage de ce message est logique car le sou requête retourne plus d’une ligne mais pourquoi sur des machines le message ne s’affiche pas et sur d’autres s’affiche
Dernière modification par infopower (17-01-2014 15:07:38)
Hors ligne
Version Oracle 10g
outil: pl/SQL developper
Hors ligne
Bonjour,
Tu ne filtre pas les données de ton select imbriqué?
Je pense que tu devrait avoir quelque chose du genre,
select table_2.a,table_2.b, (select table_1.x from table_1 where table_1.cle = table_2.champs) c from table_2
Car au vu du message retour il te dis qu'il essaye de mettre x lignes de "table" provenant de la requête imbriqué dans chacune des lignes du select principal.
Si c'est pas le cas peux tu mettre les requêtes (en masquant le nom réel des champs si nécessaire)
Dernière modification par Van (17-01-2014 13:16:25)
Hors ligne
Et d'après une petite recherche internet quand tu n'as pas le message c'est pas forcément que tu n'as pas le problème, c'est juste que tu n'as pas le message...
Hors ligne
Ton autre requête peut très bien ne renvoyé qu'une seule ligne au passage si la requête imbriqué est filtré sans avoir de clause where en lien avec la requête principale.
L'erreur remonté par ton SGBD est pour le même type d'erreur que l'exemple ci dessous avec un = à la place d'un in dans une clause where utilisant une requête imbriqué.
Select * from table_1 where table_1.a = (select table_2.a from table_2) -- Si table 2 ne comporte qu'une seule ligne OK sinon KO Select * from table_1 where table_1.a in (select table_2.a from table_2) -- Pas de plantage.
Au niveau code erreur avec DB2 j'ai le même que ça soit dans un where comme ici ou dans le select comme dans ton exemple. Le libellé erreur étant assez similaire.
SQL0811N Le résultat d'un FULLSELECT scalaire, d'une instruction SELECT INTO ou VALUES INTO est supérieur à une ligne.
Hors ligne
Bonjour,
Merci pour vos réponses.
On es d'accord sue le message d'erreur le système doit afficher ce message car la sou requête retourne plus qu'une ligne.
La question pourquoi le message s'affiche que un oracle client et ne s'affiche pas sur l'autre.
SELECT a,b, (select t from table1 where a1 = o.b) c FROM table2 o
Cordialement
Dernière modification par infopower (17-01-2014 15:06:45)
Hors ligne
Sans doute parceque les 2 postes ne se connectent pas avec le même client Oracle et que l'un est moins buggé que l'autre.
Hors ligne
Est ce que le tests est effectué sur la même base avec le même jeu de donnée?
Est ce que la donnée a1 de table1 peux être en doublon? Ou est ce qu'il y a une contrainte d'unicité ( ou de clé primaire) sur ce champs?
Hors ligne