[OK]を、以前私が持っていた問題に関する質問があります。私はそれを修正する方法を知っていますが、私たちはエラーを再現しようとするのに問題があります。Sybaseの変数選択ロジック
他のレコードに基づいてレコードを作成する一連の手順があります。レコードは、link_id
によってプライマリレコードにリンクされています。このlink_id
をつかむの手順では、クエリは、活動のためのテーブルの複数の行があり、今
select @p_link_id = id --of the parent
from table
where thingy_id = (blah)
です。一部はキャンセルできます。私が持っているコードは、select文でキャンセルされた行をdisincludeしないので、以前にキャンセルされた行がある場合、それらのidがselectに表示されます。キャンセルされた行を取り消した場合、常に選択されている「開いた」レコードが1つあります。 (where status != 'C'
を追加)
これはこの問題を解決します。しかし、開発環境で問題を再現できるようにする必要があります。
私はデータのヒープ全体を入力して開き、キャンセルなどして、このselect文を取得して無効なIDを返すようにしました。しかし、selectを実行するたびに、idが順番に(シーケンスが生成されます)、このエラーが発生した場合、selectステートメントは変数の最初の値を返すようになりました。
たとえば、上記の
ID Status
1 Cancelled
2 Cancelled
3 Cancelled
4 Open
私は私がしたいIDのための選択をすれば、私が取得したい「4」。このエラーでは、結果は1です。ただし、キャンセルされたレコードを10個入力しても、選択の最後のレコードが残ります。
oracleでは、変数を選択して複数のレコードが返された場合、エラーが発生することがわかりました(私は思う)。 Sybaseは明らかにエラーを起こさずに変数に複数の値を割り当てることができます。
データがテーブルからどのように選択されているか、ソート順のないIDが昇順で返されない場合、または変数が変数に選択されるdboptionがあると考えていますクエリされた最初または最後の値を保存します。
編集:ストアドプロシージャの変更をロールバックしてこのエラーを再現できるようです。ただし、procsはこのlink_id列の近くにはありません。データベースアーキテクチャの変更によりインデックスなどが破損する可能性はありますか?
これは[tag:sybase-asa]、[tag:sybase-ase]、[tag:sybase-iq]、または[tag:sqlanywhere]ですか? [sybase]タグをクリーンアップしようとしています... –