PL/SQLを使用して、条件に合致するレコードのみをアップデートしようとした場合
この条件が他のテーブルを参照しなければいけない時どのようなロジックで実現できるでしょうか?
例えば下記のようなアップデート対象テーブルがあります。
トランT
取引先| 年月 |店舗区分1 |売上
AAA 201105 1 10000
マスタT
取引先| 開始日 | 終了日
AAA 20100501 20110608
トランTは月別店舗別の売上を管理しているテーブルで
マスタTは店舗の休業日数を管理いているマスタテーブルになります。
更新を行いたいのはトランTのフィールド「店舗区分1」でその条件は
前年同月に休業日が発生している店舗の「店舗区分1」を'2'に変更したい場合どのようにすれば
これを実現できるでしょうか?
やり方は複数あると思うのですがPL/SQLで実現できればと思っています。
しかし、PL/SQL初心者の為これに必要なコマンドや関数などがわかりません。
調べてみてもこのようなケースのサンプルなどが無く困っています。
どなたか詳しい方がいればご教示頂きたく存じます。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
なぜPL/SQLでやろうとしたのでしょうか?
UPDATE トランT
SET 店舗区分1 = 2
WHERE EXISTS
( SELECT 1 FROM マスタT
WHERE トランT.取引先=マスタT.取引先
AND トランT.年月 BETWEEN SUBSTR(マスタT.開始日,1,6)
AND SUBSTR(マスタT.終了日,1,6) )
ではダメですか。
この回答への補足
ご回答ありがとうございます。
大変参考になります。
なぜPL/SQLで実現しようとしたかというと自分の勉強のためと
当質問の内容は要件の一部であり
全処理概要は
1.日次で売上明細Tより月店別に売上集計を行いトランTにインサート
2.インサートしたデータの店舗区分の判定と更新
これらの処理をストアドプロシージャとして同DBに格納。
それを日次でShell等からcallするという仕様にしたいと思っております。
これを考えた時にメンテナンスのことを考えるPL/SQLを使用して
ストアドプロシージャを作成したほうが良いかと考えました。
もっと良い方法などがあれば是非教えていただきたいです。
よろしくお願いします。
No.3
- 回答日時:
の「WHERE CURRENT OF による UPDATE 処理」をサンプルに組んでみられては?
ここの
cursor cur is select id, txt from insert_sample for update;
を
cursor cur is select t.年月,t.店舗区分1,t.売上取引先,m.開始日,m.終了日
from トランT t,マスタT m for update of t.店舗区分;
とすればよいと思います(未確認)。
この形で、t.年月とm.開始日,m.終了日を判定してもいいし(遅いし負荷が高いけど)、
このfrom句の次にwhere句でt.年月とm.開始日,m.終了日に関する条件を設定してもいい
(早いし負荷が軽いのでこちらをお勧め。)
注:for update of について
OF句で指定した表のSELECTしたレコードがロックされますが、OF句で指定してない表はロックされません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
副問合せにLIKE文を使う方法は...
-
IPアドレスを数値に変換
-
batファイルでのSQL(oracle)...
-
oracleのimpdpでORA-39166
-
バッチファイルで複数フォルダ...
-
【SQL】IN句内のサブクエリが重...
-
SQL 2つのテーブルとSUBSTRING...
-
update文で質問です。 下記の条...
-
osqleditについて
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
-
Oracleですがsqlで質問です。 ...
-
sqlで質問です。 Aテーブルの登...
-
sqlで質問です。 Aテーブルの情...
-
SQLの書き方について
-
SQLについて教えて下さい。 主...
-
sqlで質問です。 idを元にidに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracle SQL 2つのテーブルを使...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
select insertで複数テーブルか...
-
SELECTで1件のみ取得するには?
-
実績累計の求め方と意味を教え...
-
Access終了時の最適化が失敗?
-
ADO VBA 実行時エラー3021
-
GROUP BYを使ったSELECT文の総...
-
レコードが存在しなかった場合
-
Excelでセルの書式設定を使用し...
-
カレントレコードが無い事を判...
-
select句副問い合わせ 値の個...
-
SQL文で右から1文字だけ削除す...
-
ファイル書込みで一行もしくは...
-
OracleのSQL*PLUSで、デー...
-
アクセスでレポートの1印刷内...
-
sqlplusの処理が途中でとまる
-
差し込み印刷のレコード数について
おすすめ情報