累積テーブルへのバックアップ方法について
OracleでのデータバックアップをSQLにて作成しようとしています。
【処理内容】
売上テーブル(URITBL)から売上累積テーブル(URIRUITBL)へ
※売上年月がシステム日付より12カ月以上前(2010年8月以前) AND 領収済みのものを
売上テーブルから売上累積テーブルへ追加し、
売上テーブルにあったデータは削除する
売上明細テーブル(URIMTBL)と売上明細累積テーブル(URIRUIMTBL)へ
※売上年月システム日付より12カ月以上前(2010年8月以前) AND 領収済みのものを
売上明細テーブルから売上明細累積テーブルへ追加し、
売上明細テーブルにあったデータは削除する
【テーブル内容】
売上テーブル(URITBL)更新前
支店CD、顧客NO、売上年月、氏名、TEL、領収済フラグ(※領収済…'1'、領収未…SPACEです)
STNCOD、KKKNO、URIYM、NAME、TEL、RYOFLG
001 000012 201006 A田太郎 123-1234 1
001 000012 201007 A田太郎 123-1234
001 000012 201008 A田太郎 123-1234 1
001 000012 201009 A田太郎 123-1234 1
001 000012 201010 A田太郎 123-1234 1
002 000101 201006 B田二郎 345-5678
002 000101 201007 B田二郎 345-5678 1
002 000101 201008 B田二郎 345-5678 1
002 000101 201009 B田二郎 345-5678
002 000101 201010 B田二郎 345-5678 1
売上明細テーブル(URIMTBL)更新前
支店CD、顧客NO、売上年月、売上金額
STNCOD、KKKNO、URIYM、URIKIN
001 000012 201006 1,000
001 000012 201007 2,000
001 000012 201008 3,000
001 000012 201009 4,000
001 000012 201010 5,000
002 000101 201006 500
002 000101 201007 1,500
002 000101 201008 2,500
002 000101 201009 3,500
002 000101 201010 4,500
売上テーブル(URITBL)更新後
支店CD、顧客NO、売上年月、氏名、TEL、領収済フラグ
STNCOD、KKKNO、URIYM、NAME、TEL、RYOFLG
001 000012 201007 A田太郎 123-1234
001 000012 201009 A田太郎 123-1234 1
001 000012 201010 A田太郎 123-1234 1
002 000101 201006 B田二郎 345-5678
002 000101 201009 B田二郎 345-5678
002 000101 201010 B田二郎 345-5678 1
売上明細テーブル(URIMTBL)更新後
支店CD、顧客NO、売上年月、売上金額
STNCOD、KKKNO、URIYM、URIKIN
001 000012 201007 2,000
001 000012 201009 4,000
001 000012 201010 5,000
002 000101 201006 500
002 000101 201009 3,500
002 000101 201010 4,500
売上累積テーブル(URIMTBL)更新後
支店CD、顧客NO、売上年月、氏名、TEL、領収済フラグ
STNCOD、KKKNO、URIYM、NAME、TEL、RYOFLG
001 000012 201006 A田太郎 123-1234 1
001 000012 201008 A田太郎 123-1234 1
002 000101 201007 B田二郎 345-5678 1
002 000101 201008 B田二郎 345-5678 1
売上明細累積テーブル(URIMRUITBL)更新後
支店CD、顧客NO、売上年月、売上金額
STNCOD、KKKNO、URIYM、URIKIN
001 000012 201006 1,000
001 000012 201008 3,000
002 000101 201007 1,500
002 000101 201008 2,500
売上テーブル(URITBL)から売上累積テーブル(URIRUITBL)へ追加のSQL、売上テーブル(URITBL)の削除のSQLは以下の2つではないかと思います。
INSERT INTO URIRUITBL SELECT * FROM URITBL WHERE RYOFLG='1' AND ( URIYM < ADD_MONTHS (SYSDATE, -12) ) ;
DELETE FROM URITBL WHERE RYOFLG=1 AND ( URIYM < ADD_MONTHS (SYSDATE, -12) ) ;
ただ、売上明細テーブル(URIMTBL)と売上明細累積テーブル(URIRUIMTBL)へ追加のSQL、売上累積テーブル(URIMTBL)の削除のSQLはどうやってコーディングしたら良いのか悩んでいます。上記と同じように作っていくので大丈夫なのか、それとも別関数を使って作っていくのか、SQLの本などを半日ほど費やして調べてるのですが、いまだ至っておりません。最悪な時は別プログラムでとも考えているのですが、納期間近でできればSQLで解決したいと思いながら苦戦しています。
以前もこちらで教えて頂いてるのでたびたびの質問で恐縮ですが、分かる方がいれば手助けして頂きたいと思い、今回投稿しますのでご教授賜りたく思います。よろしくお願いします。
お礼
返事が遅れてしまい申し訳ありません。 サブクエリの使えない4.0だったため、いい機会だったので思い切って5.0に移行しました。無事にうまくいきました。ありがとうございました。