2014-03-28 79 views
7

我想從SQL開發人員運行查詢和查詢有變量(:var)。我對日期變量有問題。如何在sql developer的「輸入綁定」對話框中使用日期變量?

我用所有可能的組合來使用to_date()函數來格式化日期。 每次得到下面的異常:

ORA-00932: inconsistent datatypes: expected DATE got NUMBER 
00932. 00000 - "inconsistent datatypes: expected %s got %s" 
*Cause:  
*Action: 

對不起不能張貼在這裏

+0

值。如果你不告訴我們一些代碼,我們可以」 t幫助.... –

+0

好吧,所以我的查詢將是這樣的 從emp 選擇first_name,last_name,dob,org dob>:highDate; 當你在sql開發者中運行這個查詢時,你會看到「輸入綁定」彈出框爲變量輸入值:highDate。 – vermap

+0

你在':highDate'中給了什麼價值? – crazycloud

回答

8

試着改變你的查詢是:

select first_name, 
     last_name, 
     dob, 
     org 
    from emp 
where dob > to_date(:highDate,'DD-MON-YYYY'); 

然後在提示時,輸入'20-JAN-2010'

+0

thks Mark,是不是意味着我們不能將一個函數作爲變量傳遞? – vermap

+0

由於我的查詢太大,所有這些更改都沒有任何方法 – vermap

+1

問題是它是一個綁定變量。如果使用綁定變量,則它是給定類型的變量的佔位符。您不能傳遞包含函數的任意字符串,否。考慮使用綁定變量作爲給定數據類型的特定值的佔位符來分析查詢。如果您無法重新編寫查詢,請嘗試在會話中設置NLS_DATE_FORMAT ='DD-MON-YYYY',然後執行原始查詢,然後輸入'20 -JAN-2010'。在這種情況下,Oracle應該使用NLS_DATE_FORMAT的值並隱式地將字符串轉換爲日期。 –

0

圖像嘗試使用替代變量。例如:

select (&var - 1) from dual; 

SQL開發人員會要求你輸入一個替代變量的值,您可以使用日期值(如SYSDATE或TO_DATE(「20140328」,「YYYYMMDD」)或任何日期你想) 。

+0

我不想改變方式..因爲我從屬性文件複製我的查詢,並希望在sql開發人員上運行該查詢,因爲查詢太大而無法進行更改。 – vermap

+0

一個簡單的搜索/替換':'與'&'應該工作。 SqlDeveloper中的Ctrl-F將顯示查找/替換向導 – tbone

+0

替換變量與綁定變量有很多不同之處,因此這不是一個有效的解決方案。替代變量每次都會導致嚴重的解析。替換變量允許SQL注入。等 – mathguy

1

嘗試用:

SELECT TO_DATE(:my_var, 'dd.mm.yyyy') my_date from dual; 

,然後輸入類似01.02.2017(不')爲:my_var

相關問題