ロックされている行を選択すると、select for update nowait でエラーが発生します。それはあなたが望むものですか?どのような問題を解決しようとしているのか、私は興味があります。実行時間の長いトランザクションがない限り、行のロックは瞬間的に一時的なものになります。
例:
CREATE TABLE TEST ( COL1 NUMBER(10) NOT NULL, COL2 VARCHAR2(20 BYTE) NOT NULL );
テスト (COL1) で一意のインデックス TEST_PK を作成します。
ALTER TABLE TEST ADD ( CONSTRAINT TEST_PK PRIMARY KEY (COL1) USING INDEX TEST_PK );
SQL セッション #1: SQL> insert into test values(1,'1111'); 1 行が作成されました。SQL> テスト値 (2,'2222') に挿入します。1 行が作成されました。SQL>コミット; コミット完了。SQL> 更新テスト セット col2='AAAA' where col1=1; 1行更新しました。
SQL セッション #2: ロックされた行を読み取ろうとすると、エラーが発生します:
SQL> select * from test where col1=1 for update nowait; select * from test where col1=1 for update nowait * 1 行目のエラー: ORA-00054: リソースがビジーで、NOWAIT を指定して取得するか、タイムアウトが期限切れになった