2017-05-29 148 views
-1

我們有一個Java應用程序,它將遠程查詢目錄中的所有SQL文件並輸出CSV文件。如果SQL文件只有SELECT命令,它會很好用。但是,爲了以正確的格式獲取日期時間,我想使用ALTER會話命令。這會在Java應用程序中產生錯誤,因爲它將每個命令視爲新文件。不幸的是,我無法訪問Java應用程序的代碼庫。從本質上講,SQL文件的每個如下所示:使用alter session從Linux命令行運行的Oracle SQL腳本

alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; 

SELECT * from sample_table 

有什麼辦法來運行編輯SQL文件作爲一個單一的執行查詢運行?

回答

1

alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';是一個DDL語句。您不能將其作爲DML語句執行。您的Java語句類將無法執行此ALTER SESSION ...查詢。另外,如果從數據庫連接的角度講話,它只能在應用該會話的會話中有效,下次它不會保持相同的值。

這種改變不能永久使用這種方法,有一個不同的方法,這是在這裏脫離主題(我知道,因爲一旦我也感到相同的需要,但在爲一個幾天)。

你如何努力實現你的結果的方式是不正確的。

將內容格式化爲您希望在中顯示日期時間的格式,您不需要ALTER SESSION命令和SELECT查詢。

使用to_char(yourDate, 'YYYY-MM-DD HH24:MI:SS') as customDate並嘗試調整爲您的主要選擇查詢。

+0

如果我不使用alter session命令,表格中的日期時間字段僅輸出爲mm/dd/yyyy。我怎樣才能使選擇查詢強制全日期時間與小時,分鐘和秒也包括在內? – Marc

+1

@Marc - 編輯清楚,檢查最後一行。 –

+0

好吧,這將正確顯示我在輸出中的日期時間。所以,只要在WHERE語句中清楚,儘管顯示屏只顯示mm/dd/yyyy,但我對日期時間進行的任何比較實際上都會下降到第二個(例如比較一個日期時間大於另一個日期時間)?改變會話的唯一方法是如何顯示它? – Marc