ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DBMS_SESSION包小议(二)

DBMS_SESSION包小议(二)

原创 Linux操作系统 作者:yangtingkun 时间:2010-03-19 20:07:20 0 删除 编辑

除了使用ALTER SESSION设置会话的状态,利用V$SESSION查询会话状态,Oracle还提供了PL/SQL接口DBMS_SESSION来查询和设置会话相关的状态。

描述SET_NLS过程。

DBMS_SESSION包小议(一):http://yangtingkun.itpub.net/post/468/498365

 

 

一般来说设置会话级的状态都是通过ALTER SESSION语句,也有个别的例外,比如角色的设置是通过SET语句实现的。Oracle除了提供SQL的方法外,还提供了PL/SQL的接口,DBMS_SESSION包,将会话状态的设置和查询集成在这个包中。

简单介绍一下SET_NLS过程,使用这个过程可以设置会话级的NLS参数设置:

SQL> SELECT * FROM V$NLS_PARAMETERS;

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE                   SIMPLIFIED CHINESE
NLS_TERRITORY                  CHINA
NLS_CURRENCY                  
¥
NLS_ISO_CURRENCY               CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
NLS_CHARACTERSET               ZHS16GBK
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY             
¥
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE

已选择19行。

下面利用SET_NLS过程修改NLS_DATE_FORMAT变量:

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
--------------
20-3
月 -10

SQL> EXEC DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT', 'YYYY-MM-DD HH24:MI:SS')
BEGIN DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT', 'YYYY-MM-DD HH24:MI:SS'); END;

*
第 1 行出现错误:
ORA-00922:
选项缺失或无效
ORA-06512:
在 "SYS.DBMS_SESSION", line 164
ORA-06512:
在 line 1

SQL> EXEC DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT', '''YYYY-MM-DD HH24:MI:SS''')

PL/SQL 过程已成功完成。

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
2010-03-20 01:44:22

需要注意,SET_NLS的第二个参数VALUE输入的值除了需要的格式外,还需要包含引号,否则会引发错误

其他的会话级NLS参数也可以修改:

SQL> SELECT TO_CHAR(SYSDATE, 'DAY') FROM DUAL;

TO_CHAR(S
---------
星期六

SQL> EXEC DBMS_SESSION.SET_NLS('NLS_DATE_LANGUAGE', '''ENGLISH''')

PL/SQL 过程已成功完成。

SQL> SELECT TO_CHAR(SYSDATE, 'DAY') FROM DUAL;

TO_CHAR(SYSDA
-------------
SATURDAY

SQL> EXEC DBMS_SESSION.SET_NLS('NLS_LANGUAGE', '''AMERICAN''')

PL/SQL procedure successfully completed.

SQL> SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP
---------------------------------------------------------------------------
20-MAR-10 01.59.26.075978 AM +08:00

SQL> EXEC DBMS_SESSION.SET_NLS('NLS_TIMESTAMP_TZ_FORMAT', '''SYYYY-MM-DD HH24:MI:SS.FF TZR''')

PL/SQL procedure successfully completed.

SQL> SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP
---------------------------------------------------------------------------
 2010-03-20 02:00:27.000487 +08:00

再次查询V$NLS_PARAMETERS视图,检查修改后的参数设置:

SQL> SELECT * FROM V$NLS_PARAMETERS;

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  CHINA
NLS_CURRENCY                  
¥
NLS_ISO_CURRENCY               CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                YYYY-MM-DD HH24:MI:SS
NLS_DATE_LANGUAGE              AMERICAN
NLS_CHARACTERSET               ZHS16GBK
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        SYYYY-MM-DD HH24:MI:SS.FF TZR
NLS_DUAL_CURRENCY             
¥
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE

19 rows selected.

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-629969/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ACOUG首次活动
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077331