0

質問があります。夜の仕事の一部として実行されるクエリがあります。このクエリは、その日に行われたすべてのアクションを提供するはずです。ただし、これはトリッキーな部分であり、常に同時に実行されるとは限りません。

これは夜間のジョブの一部であるため、クエリが 1 日目に 00:05 に実行され、2 日目には 23:55 に実行される可能性があります。今日の日付を使用したり、昨日の日付を使用したりすることはできないため、クエリが複雑になります。

これまでに次のクエリを取得しました。

select deuda_id from deuda where n_expediente in 
   (select 
      (case when to_char(sysdate, 'HH24:MI:SS') between '00:00:00' and '12:00:00' then 
           (select n_expediente from cartas_enviadas where codigo_carta in ('OIEUR','OIGBP') and f_envio > trunc(sysdate-1)
           ) else 
           (select n_expediente from cartas_enviar where codigo_carta in ('OIEUR','OIGBP')
           )
       ) from dual
   );

簡単な説明: (データベースはスペイン語/イタリア語です): deuda_id は一意の請求書番号です。n_expediente はケース番号です (このクライアントでは常に一意です)。f_envio は実行日です。codigo_carta はアクション タイプです。

Cartas_enviar は、予定されているすべてのアクションを保持します。アクションが実行されると、f_envio に入ります。一晩で、実行されたすべてのアクションが cartas_enviar から cartas_enviadas に移動されます)。

私がやろうとしているワットは次のとおりです。

現在時刻を見てみたい。午前 0 時前の場合は、テーブル cartas_enviar を確認し、そこから n_expediente を取得しますが、アクションが OIEUR または OIGBP の場合のみです。真夜中過ぎの場合、テーブル cartas_enviadas を見て、そこから n_expediente を取得したいのですが、アクションが OIEUR または OIGBP であり、アクションが昨日実行された場合のみです。

ただし、このクエリを実行しようとすると、次のエラー メッセージが表示されます ORA-00905: missing keyword

誰かがこのクエリを手伝ってくれませんか?

PS: Oracle データベースです。

4

1 に答える 1

0

問題は、サブクエリのサブクエリからそのような多くの値を取得してそれらを返すことができないことです。代わりにこのアプローチを試してください。

select deuda_id
  from deuda
where 
  (to_char(sysdate, 'HH24:MI:SS') between '00:00:00' and '12:00:00'
  AND n_expediente IN (select n_expediente
                        from cartas_enviadas
                      where codigo_carta in ('OIEUR','OIGBP')
                        and f_envio > trunc(sysdate-1) ))
  OR (NOT to_char(sysdate, 'HH24:MI:SS') between '00:00:00' and '12:00:00'
    AND n_expediente IN (select n_expediente
                          from cartas_enviar
                          where codigo_carta in ('OIEUR','OIGBP')))
;
于 2013-10-17T13:58:34.603 に答える