si vous exécutez une déclaration comme celle-ci:
select first field1, field2 from exampleTable where field1 = '1';
ensuite, vous obtenez un avertissement comme celui-ci:
Le résultat renvoyé est non déterministe SQLCode = 122
Jusqu'à présent, ça va, car dans ce cas, vous avez besoin d'une clause "commande par" ici.
Mais lorsque vous utilisez la même instruction à l'intérieur d'un bloc de fin de début, mettez les valeurs dans certaines variables déclarées,
BEGIN
declare varField1 varchar;
declare varField2 varchar;
select first field1, field2 into varField1, varField2
from exampleTable
where field1 = '1';
END
l'avertissement ne vient pas! Pourquoi?
La clause "ordre by" n'est-elle pas nécessaire ici? Cette déclaration est-elle soudainement déterministe? ...
(en utilisant SQL n'importe où 12)
Les lignes ne sont pas retournées dans un ordre spécifique de SQL (en réalité, ils sont susceptibles d'être dans le même ordre la plupart du temps), donc sans ordonnance par aucune des lignes pouvant être retournée en premier. Il est donc non déterministe car ce premier enregistrement peut changer chaque fois que vous exécutez la requête.
Emballage dans un bloc ne rend pas la réponse déterministe, cela cache simplement l'avertissement.
Je crois que toute déclaration de sélection de la table de base est non déterministe en raison des données pouvant changer entre les appels.