2017-11-27 4 views
0

レポートの一部として次の(わずかに狂った)コードがあります(メタデータの負荷が発生します)。予想された日付の場合の数字

問題は、数字を返すすべてのケースにかかわらず、:i_schedfreqの任意の値について、この1つのスニペットがORA-00932エラー(予想される日付の取得番号)をスローすることです。

これは、両方の11グラムで発生及び12c

select case 
     when :i_schedfreq = 'M' then 
      abs(months_between(trunc(:DateFrom, 'MM'), trunc(:DateTo,'MM'))) 
     when :i_schedfreq = 'W' then 
      ceil(ceil(trunc(:DateTo) - trunc(:DateFrom))/7) 
     when :i_schedfreq = 'H' then 
      floor((:DateTo - :DateFrom)*24) 
     else 
      trunc(:DateTo)- trunc(:DateFrom) 
     end as v_diff 
from dual 

私はここで何かが足りないのですか?

+1

はよろしいですこと:DateFromと:DateTo日付があるとないで日付を表すいくつかの他のタイプ? –

+0

':DateFrom'と':DateTo'を日付として使ってくれますが、@GoranStefanovićのコメントのように文字列を作ると正確な 'ORA-00932'エラーが出ます。 –

+0

@GoranStefanovićSSRSから日付を渡しています。これをOSQLDでNLS形式の日付値を使用して実行すると、エラーが発生します。 – JohnHC

答えて

0

私の机の上に頭をぶつけた日の後、いくつかの古い報告書を見て、うまくいく解決策を見つけました。

私は日付などのパラメータをキャストしています

select case 
     when :i_schedfreq = 'M' 
      then abs(months_between(trunc(cast(:DateFrom as date), 'MM'), trunc(cast(:DateTo as date),'MM'))) 
     when :i_schedfreq = 'W' 
      then ceil(ceil(trunc(cast(:DateTo as date)) - trunc(cast(:DateFrom as date)))/7) 
     when :i_schedfreq = 'H' 
      then floor((cast(:DateTo as date) - cast(:DateFrom as date))*24) 
     else trunc(cast(:DateTo as date))- trunc(cast(:DateFrom as date)) 
     end as v_diff 
from dual 
関連する問題