![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になります。
オラクル初心者です。
宜しくお願い致します。
下記の様な、for~loopで、
tmpM商品単価(主キーなし)と言う一時表テーブルから
M商品単価(主キーは「品番」)へインサートをする際、
tmpM商品単価には、「品番」フィールドにダブった品番
がある為、単価実行日を降順に並べ替え古い行は、
where not exists(~)で、インサートされない様に考えました。
しかし、下記構文では、コミットされる前だからなのか、
ダブった品番の行もインサートされようとされ、エラー
となってしまいます。
どなたかご親切な方、ご教授下さいます様、
宜しくお願い致します。
記
create or replace
procedure dbInsSyouhinmaster
(
out_valoutpls_integer
)
as
cursor c_1 is
select 品番,商品分類,売上単価,単価実行日,登録日時,登録者
from tmpM商品単価 a
where not exists(select * from M商品単価 b where trim(a.品番) = trim(b.品番))
order by 単価実行日 DESC;
begin
out_val:=0;
for r_emp in c_1 loop
if c_1%FOUND then
INSERT INTO M商品単価
(品番,商品分類,売上単価,単価実行日,登録日時,登録者)
VALUES(r_emp.品番,r_emp.商品分類,r_emp.売上単価,r_emp.単価実行日,
r_emp.登録日時,r_emp.登録者)
;
end if;
out_val := out_val + 1;
end loop;
end;
No.1ベストアンサー
- 回答日時:
こんな感じでどうですか?
BEGIN
INSERT INTO
M商品単価(品番,商品分類,売上単価,単価実行日,登録日時,登録者)
SELECT
A.品番,A.商品分類,A.売上単価,A.単価実行日,A.登録日時,A.登録者
FROM
tmpM商品単価 A,
(SELECT 品番,MAX(単価実行日) AS MAX_単価実行日 FROM tmpM商品単価 GROUP BY 品番) B,
(SELECT DISTINCT 品番 FROM M商品単価) C
WHERE
A.品番 = B.品番 AND
A.単価実行日 = B.MAX_単価実行日 AND
A.品番 = C.品番 (+)
C.品番 IS NULL;
out_val := SQL%ROWCOUNT;
END;
有難うございます。
こんなに早くご回答頂けると思いませんでした。
大変参考になります。
すみません一つお教え頂きたいのですが、
A.品番 = C.品番 (+)の(+)はどういう意味でしょうか。
宜しくお願い致します。
No.2
- 回答日時:
>すみません一つお教え頂きたいのですが、
>A.品番 = C.品番 (+)の(+)はどういう意味でしょうか。
(+)はleft joinの事です
例えば、以下の(1)と(2)のSQL同等です
(1)
SELECT
TABLEA.*
FROM
TABLEA,
TABLEB
WHERE
TABLEA.CD =TABLEB.CD (+)
(2)
SELECT
TABLEA.*
FROM
TABLEA
LEFT JOIN TABLEB ON
TABLEA.CD =TABLEB.CD
A.品番 = B.品番 AND
A.単価実行日 = B.MAX_単価実行日 AND
ここで、単価実行日の最大のものに絞込み
A.品番 = C.品番 (+) AND
C.品番 IS NULL;
ここで、既にM商品単価に入っている品番を除外しています。
先ほど書いたものは、 (+)の後にANDが抜けていましたので訂正します。
INSERT INTO
M商品単価(品番,商品分類,売上単価,単価実行日,登録日時,登録者)
SELECT
A.品番,A.商品分類,A.売上単価,A.単価実行日,A.登録日時,A.登録者
FROM
tmpM商品単価 A,
(SELECT 品番,MAX(単価実行日) AS MAX_単価実行日 FROM tmpM商品単価 GROUP BY 品番) B,
(SELECT DISTINCT 品番 FROM M商品単価) C
WHERE
A.品番 = B.品番 AND
A.単価実行日 = B.MAX_単価実行日 AND
A.品番 = C.品番 (+) AND // ←ANDが抜けてた
C.品番 IS NULL;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- Excel(エクセル) Excel関数 情報引用する方法 4 2022/07/31 20:59
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- Excel(エクセル) グループの最後の行に書式、計算式なども同じ行を追加するマクロを教えてもらえませんか。 7 2022/05/18 10:13
- スーパー・コンビニ 一斉値上 スーパーの食料品 値上や単価の仕組みは? 4 2022/06/01 16:18
- Excel(エクセル) IFERROR、SMALL関数について 2 2022/08/22 23:40
- 飲食店・レストラン かつやさん値上げしましたか?今日、ロースカツとアジフライの単品買ったんですがあれと?(´・ω・`) 1 2023/03/11 21:05
- 債券・証券 高度な質問だと思いますが、知性あふれる方にお願いします。教えてください。 現在メットライフア◯コで積 7 2023/08/06 10:12
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessの実行時エラーについて
-
SQL文で、合計が0のレコードを...
-
EXISTSを使ったDELETE文
-
異なるデータベース間のテーブ...
-
日付により変動する「単価」を...
-
FROM句にサブクエリ使えませんか
-
ACCESS 商品毎の最新の単価を設...
-
アクセス フィールド名に変数...
-
クエリフォームからのレコード...
-
SQLで特定の項目の重複のみを排...
-
SELECT 文 GROUP での1件目を...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
INSERT文でフィールドの1つだ...
-
副問合せの書き方について
-
Oracleのデータ型、NUMBERについて
-
JANコードとPOSコードは同じ?
-
数値フィールドのワイルドカー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
ACCESS ツリービューの作り方
-
日付により変動する「単価」を...
-
ACCESS 商品毎の最新の単価を設...
-
アクセス フィールド名に変数...
-
最大値を含むレコードの抽出
-
アクセスにて月末日付を取得し...
-
アクセスのフォーム上でのルッ...
-
ACCESSでクエリ作成時複数のフ...
-
ACCESSでDLookUpすると、不正な...
-
前月の取得について
-
【SQL】あるマスタのレコードに...
-
レスポンス向上のためのDB設計
-
アクセス★非課税、課税の合計金...
-
inner join,left joi...
-
異なるデータベース間のテーブ...
-
サブクエリの書き方
-
ACCESS初心者です。
おすすめ情報