2017-04-12 26 views
0

Oracle SQL * Plus(以及SQL Developer)不支持將變量聲明爲日期(Citation)。在變量中捕獲日期的適當方法?

所以我可以選擇到一個varchar,但它需要我轉換爲一個字符串。然後它不再是一個日期,我不能對它進行日期算術。

使用日期變量的適當方式是什麼?我在BEGIN/END的開始處使用變量而不是聲明,因爲我需要它們在塊外部可用,以使選擇容易顯示。

clear screen; 
variable someid number; 
variable somedate varchar; 
exec :someid := 1234; 

Begin 
select c.some_timestamp into :somedate from someschema.sometable c 
where c.someid = :someid ; 
end; 
/

select :somedate from dual; 

回答

2

你需要使用to_dateTO_TIMESTAMP如果你想要做算術。

顯然它是SqlPlus的限制。下面是一個例子:

variable my_date varchar2(30) 

exec :my_date := '12-04-2017'; 

select * from mytable where date_col = to_date(:my_date,'dd-mm-yyyy'); 

看看這裏Declare a variable of type DATE using var

+0

「SqlPlus限制」,所以我沒有使用SQL * Plus客戶端(抱歉不提),我正在使用SQL Developer。即使您不使用該特定客戶端,也許BEGIN/END塊之外的所有內容都被視爲「SqlPlus」?你能澄清一下嗎?當我回到PC時,我會嘗試解決您的問題。 – AaronLS

+2

@AaronLS - 適用於SQL \ * Plus的大多數東西也適用於SQL Developer。這當然。 –

0

這確實或多或少同樣的事情:

declare 
    somedate date; 
Begin 
    select c.some_timestamp into somedate 
    from someschema.sometable c 
    where c.someid = &someid ; 
    dbms_output.put_line(somedate); 
end; 
/

很明顯,你有需要運行腳本之前啓用SERVEROUTPUT但您可以使用somedate作爲日期,而無需始終使用字符串。


最終歸結到你想要做的細節。我發現現在越來越難以與SQL * Plus腳本交互工作:我使用IDE工作表開發它們,然後一些shell程序自主執行它們。你說你正在使用SQL Developer,所以你可能在同一個旅程中。

+0

謝謝。 「我在使用變量而不是在BEGIN/END開始處聲明,因爲我需要它們在塊之外,使得選擇容易顯示。」使用dbms_output或遊標會很快變得乏味。 – AaronLS