2016-12-14 38 views
-2

我有一個定義的日期在我的劇本增量日期ORA - 00932. 00000 - 「不一致的數據類型:有望%S得了%的」

define REPORT_DATE = to_date('05112016','ddmmyyyy') 

當我試圖增加它

select * 
from STG_PREP_CHARGES_PLAN SPCP 
where &REPORT_DATE + 1 < SPCP.NEXT_CHARGE_DATE 

我得到ORA - 00932. 00000 - 「不一致的數據類型:預計%s得到%s」

有沒有像add_months這樣的函數,但是幾天?

SPCP.NEXT_CHARGE_DATE是一個日期

desc STG_PREP_CHARGES_PLAN 
Name     Null Type   
---------------------- ---- ------------- 
NEXT_CHARGE_DATE   DATE   

UPDATE

很奇怪。我將日期更改爲to_date('06112016','ddmmyyyy'),然後返回並開始工作。不知道它是什麼。

UPDATE2 找到問題所在。在運行之前,我只需選擇所有查詢。

+1

如果你在'TO_DATE編輯代碼( '05112016' ,'ddmmyyyy')+ 1 Aleksej

+1

問題的關鍵是'SPCP.NEXT_CHARGE_DATE'是一個日期還是別的(像一個數字或字符串,類似於'05112016')? – mathguy

+0

請添加代碼上下文(前後一些行) –

回答

2

這裏的問題似乎是在NEXT_CHARGE_DATE的類型。

例如,如果我檢查就像對一個date你的一個變量,我沒有問題:

SQL> define REPORT_DATE = to_date('05112016','ddmmyyyy'); 
SQL> select 1 from dual where sysdate = &report_date; 
old 1: select 1 from dual where sysdate = &report_date 
new 1: select 1 from dual where sysdate = to_date('05112016','ddmmyyyy') 

no rows selected 

不管,如果我每天添加到變量值,它仍然有效:

SQL> select 1 from dual where sysdate = &report_date +1; 
old 1: select 1 from dual where sysdate = &report_date +1 
new 1: select 1 from dual where sysdate = to_date('05112016','ddmmyyyy') +1 

no rows selected 

如果我試圖用一個對象,它是不是一個date變量比較,說number,我中有你的錯誤:

SQL> select 1 from dual where 1 = &report_date +1; 
old 1: select 1 from dual where 1 = &report_date +1 
new 1: select 1 from dual where 1 = to_date('05112016','ddmmyyyy') +1 
select 1 from dual where 1 = to_date('05112016','ddmmyyyy') +1 
          * 
ERROR at line 1: 
ORA-00932: inconsistent datatypes: expected NUMBER got DATE 

不管我刪除+1,我仍然得到同樣的錯誤,因爲這個問題是在類型你是比較,不是在路上的對象的你,每天添加到您的變量:

SQL> select 1 from dual where 1 = &report_date; 
old 1: select 1 from dual where 1 = &report_date 
new 1: select 1 from dual where 1 = to_date('05112016','ddmmyyyy') 
select 1 from dual where 1 = to_date('05112016','ddmmyyyy') 
          * 
ERROR at line 1: 
ORA-00932: inconsistent datatypes: expected NUMBER got DATE 

爲了解決這個問題,您應該檢查NEXT_CHARGE_DATE的類型,並在代碼中添加一些to_charto_numberto_date以比較相同類型的對象。

隨着date列,一切工作正常,我(Oracle數據庫11g Express Edition的發佈11.2.0.2.0 - 64位生產):

SQL> create table STG_PREP_CHARGES_PLAN (NEXT_CHARGE_DATE date); 

Table created. 

SQL> define REPORT_DATE = to_date('05112016','ddmmyyyy'); 
SQL> select * 
    2 from STG_PREP_CHARGES_PLAN SPCP 
    3 where &REPORT_DATE + 1 < SPCP.NEXT_CHARGE_DATE; 
old 3: where &REPORT_DATE + 1 < SPCP.NEXT_CHARGE_DATE 
new 3: where to_date('05112016','ddmmyyyy') + 1 < SPCP.NEXT_CHARGE_DATE 

no rows selected 
相關問題