登録処理、更新処理、削除処理を行う際に
他ユーザからのアクセスを制限するために
登録、更新、削除処理を行う前にロック処理を行おうと思っています。
その際にテーブルのロックがすでにしている場合や
テーブルのロックに成功した、テーブルのロックに失敗
した場合に戻り値を返すのでしょうか?
お分かりになる方よろしくお願い致します。
一応イメージとして
LOCK TABLE テーブル名称 IN SHARE ROW EXCLUSIVEの処理の後
UPDATE文や、INSERT、削除などを行おうと思っています。
よろしくお願い致します。
No.4ベストアンサー
- 回答日時:
>更新処理全体をストアドプロシージャで呼ぶという事ですが
Oracleのプロシージャで行うと言う事でしょうか?
そうです。PL/SQLでOracleのパッケージかスタンドアロンプロシージャを作成し、パラメータを渡してコールする仕組みです。
PL/SQLの書き方はさすがにここで説明できませんが、Oledbでの使い方については「ストアドプロシージャ Oledb」で検索すると詳しい説明の載っているサイトが上位でヒットすると思います。
メッセージありがとうございます。
処理的にはPLSQLで更新・ロック処理を
1つの処理として出来る事が理想だったのですが
今回はLOCK TABLEではなく、SELECT FOR UPDATEとして
ロック処理を行うことにしました。
色々とアドバイスありがとうございました。
(PLSQLの書き方についてはコレからも調べてみます)
No.3
- 回答日時:
私は通常更新処理全体をストアドにして呼んでしまうので、このような書き方はしないのですが、LOCK TABLEにNOWAIT句をつけなければ、リソースのロックが取得できなかった場合は、ロックが取得できるまで待ち続けます。
だからExceptionも発生せず実行中のままになるでしょう。ただ、Oleなどの場合はCommandTimeOutがありますから、そちらにかかればそこでTimeoutのExceptionが発生しますし、ASPであればIISにもタイムアウト設定がありますから、それにも依存する可能性はあるでしょう。
メッセージありがとうございます。返事遅くなりました。
更新処理全体をストアドプロシージャで呼ぶという事ですが
Oracleのプロシージャで行うと言う事でしょうか?
自分としては、登録、更新処理の場合に
ロックの処理と、更新・登録を
わざわざ分けるのではなく、プロシージャなどで
ロックと登録または更新が出来ればいいなと思っているのですが
ネットで調べたんですがなかなか載っておらず…
どこかいいサイトがあれば教えて下さい。お願い致します。
No.2
- 回答日時:
ASP.NETでしたか。
エラーはtry ~ catchで捕捉できます(OLEなら、OledbException)。
Lockが有効なのはTransactionが維持されている間だけであるということは留意してください。
メッセージありがとうございます。
もうひとつお聞きしたいのですが
Try
Catch ex As OledbException
Return False
End Try
Return True
なとどして例外が発生した場合、exとして
例外を受け取り、すぐにFalseを返してしまうのでしょうか?
WAITを指定する事により、待機状態になるとの事ですが
Falseを返さずに待つのでしょうか?
お分かりになればよろしくお願い致します。
No.1
- 回答日時:
処理を何で書くのかはわかりませんが、
LOCK TABLE テーブル名称 IN SHARE ROW EXCLUSIVE MODE NOWAITを実行して、ロックに失敗した場合はエラーになります。
「ORA-00054 リソース・ビジー、NOWAITが指定されていました」
(NOWAITを指定しなければ待ちに入るので返ってきません)
エラートラップが必要かと思います。
成功した場合は特に何も返らないはずです。
メッセージありがとうございます。
登録や削除を実行する際に他のユーザから
アクセス制限を設けるためにLOCK TABLE 処理を書くつもりでいます。
このORA - 00054は例外としてエラーメッセージが表示する訳ですよね。
エラートラップとはTry ~ Catch ~ Finallyなどでしょうか?
言語がASP.NETなので
Try
Catch ex As Exception
Return False
Finally
Return True
End Try
などとしてうまくいくかわかりませんが、処理を分ける事に
して見ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- UNIX・Linux shellscript内のコマンドを、sudo(toor)として実行 2 2022/09/23 15:05
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Access(アクセス) AccessVBAで任意の複数リンクテーブルをAccessVBAを動かす際に削除したいと考えておりま 1 2022/11/17 15:45
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RDBのテーブル種類の違い
-
同じSELECT文同士でのデ...
-
DELETE文でFROM句を省略した場合
-
統計情報の取得=コミットですか?
-
他の処理でselectさせないよう...
-
一時表 を表単位で
-
object browser で処理を中断す...
-
チューニング対象のSQLの見つけ...
-
accessでイベントを中止するよ...
-
ActiveX DLLでのオラクルのトラ...
-
UPDATE がうまくいかない
-
年度毎にシーケンスの初期化?
-
LOCK TABLE
-
Oracleから見たOracleの優位性(...
-
Viewにインデックスは張れ...
-
データを削除しても表領域の使...
-
Data Pump で大量データインポ...
-
ORA-00959: 表領域'****'は...
-
Access レコードを追加できませ...
-
SQL*LoaderとInsertの違いについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
RDBのテーブル種類の違い
-
他の処理でselectさせないよう...
-
object browser で処理を中断す...
-
同じSELECT文同士でのデ...
-
accessでイベントを中止するよ...
-
PL/SQLの平行処理について
-
DBリンクエラーについて
-
[性能改善]AccessのDBに大量の...
-
年度毎にシーケンスの初期化?
-
Access2013で操作ログを残した...
-
統計情報の取得=コミットですか?
-
処理速度の見積もり時間について。
-
Oracleから見たOracleの優位性(...
-
チューニング対象のSQLの見つけ...
-
C#でトランザクション開始後参...
-
テーブル名を指定してCsv出力
-
カーソルについて
-
行ロックとテーブルロックについて
-
SQLServerのロック?について
おすすめ情報