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で質問しましょう!
似たような質問が見つかりました
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- 薬剤師・登録販売者・MR 登録販売者のダブルワーク 現在、登録販売者(店舗管理者)として働いていますが、近々転職しようと思って 1 2023/04/27 15:36
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- 政治 日本の定数人口当たり民事訴訟件数は、ドイツ、韓国の1/3しかない。 2 2023/02/02 16:11
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- 賃貸マンション・賃貸アパート 居住用賃貸アパートにサロン出店 4 2023/04/02 22:30
- 英語 ①普通名詞の所有格+②普通名詞で、①普通名詞に定冠詞の意味を付加したい場合の表現方法等について 23 2022/09/30 12:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
orace SQL文のエラー(ORA-0092...
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
-
Oracleですがsqlで質問です。 ...
-
sqlで質問です。 Aテーブルの登...
-
sqlで質問です。 Aテーブルの情...
-
SQLの書き方について
-
SQLについて教えて下さい。 主...
-
sqlで質問です。 idを元にidに...
-
oracleで 10,20, 30, というデ...
-
索引作成について
-
googleプレイの履歴で取得とイ...
-
sql(oracle)で質問です。 テ...
-
オラクルゴールドについて
-
sqlのupdate文で質問です。 テ...
-
ビットで表せる数値について
-
TOPページ以外の、301リダイレ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
orace 変更表エラーを回避する...
-
年月が連続したテーブルとそう...
-
PL/SQL 条件アップデートについて
-
SELECT文で条件にあったテーブ...
-
こういうDELETE文を作成したい...
-
ORACLEで2つのテーブルを同時に...
-
Oracle SQL 2つのテーブルを使...
-
SQLの作成について
-
同じフィールドから2種類の値を...
-
★アクセス2000★条件付き合計金...
-
SQLを考えてます。
-
こういうSELECTは可能でしょうか?
-
FOREIGN KEYの書き方
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
-
SQL文で右から1文字だけ削除す...
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
おすすめ情報