2017-05-29 74 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