[解決済み] ORA-04021: オブジェクトのロック待ちでタイムアウトが発生しました。
2022-02-06 23:42:15
質問
あるテーブルから返される値を計算し、表示する匿名PL/SQLブロックがあります。
DECLARE
U_ID NUMBER :=39;
RETAIL BINARY_FLOAT:=1;
FLAG NUMBER;
BEGIN
SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID INTO RETAIL, FLAG FROM UNITS WHERE UNIT_ID=U_ID;
LOOP
SELECT NVL(MAX(UNIT_ID),U_ID) INTO FLAG FROM UNITS WHERE FATHER_ID=FLAG;
IF FLAG=U_ID THEN EXIT; END IF;
SELECT RETAIL* RETAIL_AMOUNT INTO RETAIL FROM UNITS WHERE UNIT_ID=FLAG;
EXIT WHEN FLAG=U_ID;
END LOOP;
DBMS_OUTPUT.PUT_LINE( RETAIL);
END;
このブロックは正しく動作しますが、同じことをPL/SQL関数を使って行いたいと思いました。
以下のように関数を書きました。
CREATE OR REPLACE FUNCTION GET_UNIT_RETAIL(U_ID NUMBER)
RETURN NUMBER
IS
RETAIL BINARY_FLOAT:=1;
FLAG NUMBER;
BEGIN
SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID
INTO RETAIL, FLAG
FROM UNITS
WHERE UNIT_ID=U_ID;
LOOP
SELECT NVL(MAX(UNIT_ID),U_ID)
INTO FLAG
FROM UNITS
WHERE FATHER_ID=FLAG;
IF FLAG=U_ID THEN
EXIT;
END IF;
SELECT RETAIL* RETAIL_AMOUNT
INTO RETAIL
FROM UNITS
WHERE UNIT_ID=FLAG;
EXIT WHEN FLAG=U_ID;
END LOOP;
RETURN NUMBER;
END;
/
上記のコードを実行して関数をデータベースに保存しようとすると、環境(SQL*PLUS)が長時間ハングアップし、最後にこのエラーを返します。
1 行目で ERROR が発生しました。
ORA-04021: オブジェクトのロック待ちでタイムアウトが発生しました。
何が問題なのでしょうか?お願いします。
解決方法は?
以下のような音がします。 ddl_lock 問題
を見てみましょう。
dba_ddl_locks
をクリックすると、作成または置換をブロックしているユーザーを確認できます。
の下に作成することも試してみてください。 別の名前 - をクリックして、何が起こるか見てみましょう。
関連
-
PLSQLは、ローカルオラクルまたはリモートオラクルデータベースに接続し、ランダムスイッチ機能を実現します。
-
Oracle Databaseの失敗したオブジェクトの処理の詳細
-
オラクルユーザー作成プロセスの説明
-
plsqlを使用してリモートOracleデータベースに接続する複数の方法
-
[解決済み] ORA-01109: データベースが開きません」エラーを解決するにはどうすればよいですか?
-
[解決済み] ORA-00955 "名前はすでに既存のオブジェクトによって使用されています"
-
[解決済み] ORA-01799: 列がサブクエリに外部結合されていない可能性があります。
-
[解決済み] ORA-29283: 無効なファイル操作 ORA-06512: "SYS.UTL_FILE", 行 536 で。
-
[解決済み] ORA-04063: パッケージ本体 "WB_PROD.PLOG" にエラーがあります。
-
[解決済み] カラムが存在するにもかかわらず、ORA-00904が発生するのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
plsqlを使用してリモートOracleデータベースに接続する複数の方法
-
Oracle TriggersとCursorsを高速に学ぶ
-
[解決済み] エラーを取得する - ORA-01858: 数値が期待される場所で非数値文字が見つかりました。
-
[解決済み】ORA-00932: 整合性のないデータ型: 予想される - CLOB を取得しました。
-
[解決済み] エラー ORA-01804 のテキストを取得しようとしているときにエラーが発生しました。
-
[解決済み] ORA-30036: アンドゥ テーブルスペース 'UNDOTBS' でセグメントを 8 つ拡張できません。
-
[解決済み] ORA-01799: 列がサブクエリに外部結合されていない可能性があります。
-
[解決済み] PLS-00382: 式が不正です。
-
[解決済み] PLS-00103:次のいずれかを期待しているときに、記号"; "に遭遇しました。
-
[解決済み] oracle pl/sql DBMS_LOCK エラー