電子書籍の厳選無料作品が豊富!

Sql developerについての質問

いつもお世話になります。
私はオラクル初心者で、オラクル11gを使用しています。
現在、Sql developerでpl/sql(ストアドプロシージャー)を
作成しています。
そして、躓いておりますのは、select内の構文で条件式を書いて
いるのですが、そこでコンパイルエラーになってしまっています。
オラクルは、ifではなくdecodeを使うのか、又は条件式の内容が悪いのか
又は長すぎるのかご教示頂きたく、宜しくお願い致します。

            記

decode ((a.最大在庫-(b.場内在庫-b.引当数量))>0,
a.最大在庫-((TRUNC(b.場内在庫/b.入数,0))*b.入数)AS 補充数量,'-'),
(a.最大在庫-(a.最大在庫-((TRUNC(b.場内在庫/b.入数,0))*b.入数))) AS 補充梱包数量,

A 回答 (1件)

DECODEの使い方が間違ってるだけなんですが・・


DECODEの中で、比較演算子は使えません。
R11をお使いなら、無理にDECODEを使うよりは、
CASEで書き直したほうがいいと思いますよ。

case
when a.最大在庫-(b.場内在庫-b.引当数量)>0
THEN a.最大在庫-((TRUNC(b.場内在庫/b.入数,0))*b.入数
ELSE '-'
end case AS 補充数量,
(a.最大在庫-(a.最大在庫-((TRUNC(b.場内在庫/b.入数,0))*b.入数))) AS 補充梱包数量,

という感じなんですが・・
疑問符が付くところが数箇所・・
(1)引当済みの在庫は、補充数量に数えなくて良いのか?
(2)補充梱包数量とは、補充数量を入数で割った数なのでは?

想像ですけど・・
case
when a.最大在庫 - (b.場内在庫 - b.引当数量) > 0
THEN a.最大在庫 - (b.場内在庫 - b.引当数量 - mod(b.場内在庫 - b.引当数量,b.入数))
ELSE '-'
end case AS 補充数量,
(a.最大在庫 - (b.場内在庫 - b.引当数量 - mod(b.場内在庫 - b.引当数量,b.入数))) / b.入数 AS 補充梱包数量,

こんな感じかな・・
    • good
    • 0
この回答へのお礼

ご丁寧なご回答頂きまして、ありがとうございます。
大変助かりました。
今後とも宜しくお願い致します。

お礼日時:2010/07/24 10:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!