我正在调用具有参数日期的 Oracle 过程。我如何指定日期的格式,以便无论 Oracle 使用哪种全球化,它都能被 Oracle 识别?
例如
create or replace procedure MyProc(p_valid_date in date) ...
Run Code Online (Sandbox Code Playgroud)
客户端调用proc,我应该如何将p_valid_date指定为字符串...?如果我使用“01212014”,即 DDMMYYYY,则它不适用于美国设置。如果我使用美国设置,则它在英国不起作用。ETC。
在 SQL Server 中,我使用 YYYYMMDD 格式,该格式是文化不变的,但我在 Oracle 文档中找不到有关文化不变格式的任何内容,并且我尝试过的所有格式似乎总是与文化绑定。
更新 我不想使用函数,因为我的客户端进行纯过程调用。这是我的客户的限制。我知道我可以将参数更改为字符串,然后在过程中使用 to_date 转换字符串,但这似乎是一个非常糟糕的设计。
谢谢
ISO 日期格式是您正在寻找的“不变”:
SQL> alter session set nls_date_format='dd/mon.yyyy';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-----------
07/nov.2014
SQL> select to_char(DATE '2014-12-31') from dual;
TO_CHAR(DAT
-----------
31/dec.2014
Run Code Online (Sandbox Code Playgroud)
您可以使用这个表示法:DATE '2014-12-31'