この質問に答えてください:あなたはあなたのテストで何を達成しようとしていますか?更新がエラーなしで実行されることを確認しますか?毎回新しいIDを取得するということですか?テーブルが存在すること?
答えに応じて、テストを変更する必要があります。ステートメントの構文が正しいことを知りたいだけの場合は、ステートメントを実行する以外に何もする必要はありません(エラーが発生してテストが失敗すると、例外がスローされます)。
毎回新しいIDを取得するようにしたい場合は、シーケンスを2回クエリし、2番目の値が最初の値と異なることを確認する必要があります。
新しい一意のIDを持つ行が挿入されていることを確認する場合は、挿入を実行して1が返されることを確認します。機能する場合は、主キー(ID)に違反していないこと、および行が挿入されました。したがって、「一意のIDで追加」メカニズムが機能する必要があります。
[編集]Oracleには、作成したばかりのIDを返す手段がないため、新しい行にIDを追加するトリガーをテストする方法はありません。シーケンスを読み取ることはできますがnextval-1
、トリガーが見たのと同じ結果が得られるという保証はありません。
試すことはできselect max(ID)
ますが、クエリを実行する前に(デフォルトのトランザクションレベルを使用して)他の誰かが別の行を挿入してコミットすると、失敗する可能性がありますREAD_COMMITTED
。
したがって、トリガーを取り除き、他の人が使用する標準の2ステップ(「新しいIDを取得」と「新しいIDで挿入」)アルゴリズムを使用することを強くお勧めします。これにより、テストがより簡単になり、脆弱性が低くなります。