2013-10-17 118 views
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)。

笏我試圖做的是以下幾點:

我想看看在當前時間。如果是在午夜之前,我想看看cartas_enviar表,然後從那裏取出n_expediente,但前提是動作是OIEUR或OIGBP。如果是在午夜之後,我想看看cartas_enviadas表,並從那裏取出n_expediente,但前提是動作是OIEUR或OIGBP,並且該動作是在昨天執行的。

但是,當我試圖執行此查詢時,出現以下錯誤消息: ORA-00905: missing keyword

有人可以幫我看看這個查詢嗎?

PS:這是Oracle數據庫

+0

好的,菜鳥的錯誤......我忘了把'結束'放在聲明中。但是,現在我得到的錯誤ORA-01427:單行子查詢返回多個行 – Gurbs

+0

我編輯了我的答案,檢查它是否適用於您。 –

回答

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'))) 
; 
相關問題