Oracle SQL*Plus>当前日期在系统变量或某种类型中可用吗?

Oracle SQL*Plus>当前日期在系统变量或某种类型中可用吗?,oracle,sqlplus,Oracle,Sqlplus,我经常将处理程序的结果或消息假脱机到文件中。为了防止spool文件被覆盖,我在spool文件名中使用日期和时间。 使用构造列{var1}NEW_VALUE{var2}和SELECT语句是获取当前日期的大量代码。当假脱机时,我想抑制这种结构的输出,因为假脱机文件中不需要它。这需要额外的编码 SQL*Plus中是否有当前日期和时间 我正在使用以下代码: SET echo OFF SET feedback OFF SET termout OFF COLUMN bestandsnaam NEW_VAL

我经常将处理程序的结果或消息假脱机到文件中。为了防止spool文件被覆盖,我在spool文件名中使用日期和时间。 使用构造列{var1}NEW_VALUE{var2}和SELECT语句是获取当前日期的大量代码。当假脱机时,我想抑制这种结构的输出,因为假脱机文件中不需要它。这需要额外的编码

SQL*Plus中是否有当前日期和时间

我正在使用以下代码:

SET echo OFF
SET feedback OFF
SET termout OFF

COLUMN bestandsnaam NEW_VALUE _vv_waarde

SELECT to_char ( sysdate, 'yyyyddmm_hh24mi') bestandsnaam
FROM DUAL;

SPOOL Verwerking_&_vv_waarde.

{ processing }

SPOOL OFF
但是我想在SQL*Plus中提供sysdate或类似的东西 所以我可以编写如下代码:

SPOOL Verwerking_#sysdate#

{ processing }

SPOOL OFF

Spool文件将被命名为“Verwerking_20190409_1904”。

没有其他方法可以做到这一点

如果您有许多脚本,并且只是想避免将此代码放入其中,那么可以将此代码放入您调用的脚本中,例如

get_date.sql:

SET echo OFF
SET feedback OFF
SET termout OFF

COLUMN bestandsnaam NEW_VALUE _vv_waarde

SELECT to_char ( sysdate, 'yyyyddmm_hh24mi') bestandsnaam
FROM DUAL;

SET echo ON
SET feedback ON
SET termout ON
然后,在每个脚本中,您可以简单地:

@get_date.sql
SPOOL Verwerking_&_vv_waarde.
PROMPT The date is &_vv_waarde

{ processing }

SPOOL OFF

嗯,有一个预定义的日期变量。但由于所有SQL*Plus变量都是字符数据类型,因此必须将NLS_DATE_格式设置为所需的字符串

alter session set nls_date_format = 'yyyyddmm_hh24mi';
SPOOL Verwerking_&_DATE.
...
SPOOL OFF

在spool文件名中没有直接使用当前日期和时间的方法,除非您正在做什么。据我所知

但是,如果符合您的要求,您可以使用以下代码:

dateVar=`date +%d-%b-%Y_%H%M%S`

sqlplus .......
spool Verwerking_'${dateVar}'
select ...; -- your query
spool off
Exit

干杯

根据下面的@kfinity答案判断,我认为这是一个预定义的参数。我想SQLPLUS中的快速定义会显示这一点。