Ok, j'ai une question relative à un problème que j'ai déjà eu. Je sais comment y remédier, mais nous avons des problèmes pour essayer de reproduire l'erreur.Sybase sélectionnez variable logique
Nous avons une série de procédures qui créent des enregistrements basés sur d'autres enregistrements. Les enregistrements sont liés à l'enregistrement principal au moyen d'un link_id
. Dans une procédure qui saisit cette link_id
, la requête est
select @p_link_id = id --of the parent
from table
where thingy_id = (blah)
Maintenant, il y a plusieurs lignes dans la table pour l'activité. Certains peuvent être annulés. Le code que je possède ne supprime pas les lignes annulées dans l'instruction select, donc s'il y a des lignes précédemment annulées, ces identifiants apparaîtront dans le select. Il y aura toujours un enregistrement 'ouvert' qui est sélectionné si je ne comprends pas les lignes annulées. (ajouter where status != 'C'
)
Ceci résout ce problème. Cependant, je dois être capable de reproduire le problème dans notre environnement de développement.
Je suis passé par un processus où j'ai entré tout un tas de données, ouverture, annulation, etc pour essayer et obtenir cette déclaration select pour retourner un identifiant invalide. Cependant, chaque fois que je lance la sélection, les identifiants sont dans l'ordre (séquence générée), mais dans le cas où cette erreur s'est produite, l'instruction select a retourné ce qui semble être la première valeur dans la variable.
Par exemple. Compte tenu de ce qui précède, si je fais une sélection pour l'ID que je veux, je veux obtenir '4'. Dans l'erreur, le résultat est 1. Cependant, même si j'entre dans 10 enregistrements annulés, je reçois toujours le dernier dans le select.
En oracle, je sais que si vous sélectionnez dans une variable et que plus d'un enregistrement est retourné, vous obtenez une erreur (je pense). Sybase peut apparemment assigner plusieurs valeurs dans une variable sans erreur. Je pense qu'il y a quelque chose à faire avec la façon dont les données sont sélectionnées dans la table, où les ID sans ordre de tri ne reviennent pas dans l'ordre croissant, ou il y a une option d où une sélection dans une variable enregistrer la première ou dernière valeur interrogée. Edit: il semble que nous pouvons reproduire cette erreur en annulant les modifications de la procédure stockée. Cependant, les procs ne vont nulle part près de cette colonne link_id. Est-il possible que des modifications de l'architecture de la base de données puissent casser un index ou quelque chose?
Est-ce [tag: sybase-asa], [tag: sybase-ase], [tag: sybase-iq] ou [tag: sqlanywhere]? Essayer de nettoyer le tag [sybase] ... –