我正在调用具有参数日期的Oracle程序。我如何指定日期的格式,以便无论它使用什么样的全球化,它都被oracle识别?
E.g。
create or replace procedure MyProc(p_valid_date in date) ...
客户端调用proc,我应该如何将p_valid_date指定为字符串......? 如果我使用例如' 01212014',即DDMMYYYY,那么它将无法使用美国设置。如果我使用美国设置,它将无法在英国工作。等
在SQL Server中,我使用的是文化不变的YYYYMMDD格式,但我无法在Oracle文档中找到有关文化不变格式的任何内容,我尝试过的各种格式似乎总是绑定到文化。
更新 我不想使用函数,因为我的客户端执行纯函数调用。这是我客户的限制。我知道我可以将参数更改为字符串然后在过程中使用to_date转换字符串,但这似乎是一个非常糟糕的设计。
谢谢
答案 0 :(得分:4)
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
您可以使用此表示法:DATE '2014-12-31'