ALTER SESSION SET nls_date_format在APEX中不起作用。但是适用于SQL Developer

时间:2019-10-20 00:33:57

标签: oracle oracle-apex date-formatting

我尝试在Oracle Application Express中使用ALTER SESSION SET nls_date_format语句更改nsl参数,但参数保持不变。

但是我可以在Oracle SQL Developer中进行更改。

我想知道为什么。

我发现此线程Number and date format : altering NLS_SESSION_PARAMETER does not work?中,Olafur Tryggvason在其中注释了有关“应用程序设置”的内容,这些内容会覆盖设置,但我找不到该配置。应该在“ Application Builder”中,但不是。

IN APEX

运行

select * from nls_session_parameters;

结果

PARAMETER   VALUE

NLS_LANGUAGE    AMERICAN

NLS_TERRITORY   AMERICA

NLS_CURRENCY    $

NLS_ISO_CURRENCY    AMERICA

NLS_NUMERIC_CHARACTERS  .,

NLS_CALENDAR    GREGORIAN

NLS_DATE_FORMAT mm/dd/yyyy

NLS_DATE_LANGUAGE   AMERICAN

NLS_SORT    BINARY

NLS_TIME_FORMAT HH.MI.SSXFF AM

运行

ALTER SESSION SET nls_date_format ="dd/mm/yyyy";

结果

Statement processed.

0.00 seconds

运行

select * from nls_session_parameters;

结果

PARAMETER   VALUE

NLS_LANGUAGE    AMERICAN

NLS_TERRITORY   AMERICA

NLS_CURRENCY    $

NLS_ISO_CURRENCY    AMERICA

NLS_NUMERIC_CHARACTERS  .,

NLS_CALENDAR    GREGORIAN

NLS_DATE_FORMAT mm/dd/yyyy

NLS_DATE_LANGUAGE   AMERICAN

NLS_SORT    BINARY

NLS_TIME_FORMAT HH.MI.SSXFF AM

IN SQL开发者

运行

select * from nls_session_parameters;

结果

PARAMETER VALUE

NLS_LANGUAGE SPANISH

NLS_TERRITORY SPANISH

NLS_CURRENCY €

NLS_ISO_CURRENCY      SPAIN

NLS_NUMERIC_CHARACTERS  ,.

NLS_CALENDAR          GREGORIAN

NLS_DATE_FORMAT       mm/dd/yyyy

NLS_DATE_LANGUAGE     SPANISH

NLS_SORT          SPANISH

NLS_TIME_FORMAT       HH24.MI.SSXFF

NLS_TIME_TZ_FORMAT    HH24:MI:SSXFF TZR

NLS_DUAL_CURRENCY     €

NLS_COMP              BINARY

NLS_LENGTH_SEMANTICS  BYTE

NLS_NCHAR_CONV_EXCP   FALSE

运行

ALTER SESSION SET nls_date_format ="dd/mm/yyyy";

结果

1 fila insertadas.

Session alterado.

运行

select * from nls_session_parameters;

结果

PARAMETER   VALUE

NLS_LANGUAGE    SPANISH

NLS_TERRITORY   SPANISH

NLS_CURRENCY    €

NLS_ISO_CURRENCY    SPAIN

NLS_NUMERIC_CHARACTERS  ,.

NLS_CALENDAR    GREGORIAN

NLS_DATE_FORMAT dd/mm/yyyy

NLS_DATE_LANGUAGE   SPANISH

NLS_SORT    SPANISH

NLS_TIME_FORMAT HH24.MI.SSXFF

NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR

NLS_DUAL_CURRENCY €

NLS_COMP  BINARY

NLS_LENGTH_SEMANTICS BYTE

NLS_NCHAR_CONV_EXCP FALSE

2 个答案:

答案 0 :(得分:1)

这是方法(如果我正确理解了问题):

  • 登录到Apex
  • 转到App Builder
  • 选择应用程序
  • 在右上角,您会看到“编辑应用程序属性” 按钮
  • 它包含4个标签(定义,安全性,全球化,用户界面)
  • 转到安全性
  • 向下滚动到“数据库会话”
  • 将类似的内容放入“初始化PL / SQL代码”中:

    begin
      execute immediate q'[alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss']';
    end;
    
  • 应用更改

应该这样做。


初始化代码也可以包含其他设置,例如NLS_NUMERIC_CHARACTERS

execute immediate q'[alter session set nls_numeric_characters = ', ']';

如果有必要,请考虑还原这些更改-请参阅同一“安全性”页面上“初始化代码”下方的“ Cleanup PL / SQL代码”部分。

答案 1 :(得分:1)

Oracle APEX使用共享连接池执行查询。如果您在SQL Workshop中运行此程序,我认为您不会获得预期的结果。

如果您将此操作作为任何给定事务的一部分运行,或者如Littfoot建议的那样出现在初始化代码中,则应该看到该会话的格式更改 。一旦控制权返回给浏览器中的用户,数据库连接就会被释放。

这是您不能在Oracle APEX中使用程序包持久性变量和全局临时表之类的原因。

如果需要更改应用程序的设置,建议的位置是“共享组件”中的“全球化属性”。 (“应用程序属性”中的第三个标签。)enter image description here