#ALTER SESSION

# 通用描述

ALTER SESSION用于动态地改变所在会话的属性或会话级的系统配置,此类改变仅在当前会话生效,会话断开后将恢复为初始值。

执行本语句,用户需具备ALTER SESSION权限。

# 语句定义

alter session::=

syntax
ALTER SESSION set_clause

set_clause::=

syntax
SET parameter_name = parameter_value

# set_clause

该语句用于指定会话属性或会话级系统配置参数的值。

# 会话属性参数

current_schema

该参数表示所在会话的当前Schema属性。

用户登录数据库后,当前Schema默认为登录用户的同名Schema,允许通过执行ALTER SESSION语句手动切换current_schema。

用户执行SQL语句操作模式对象时,如果没有显式指定对象所属Schema,系统会默认视为操作current_schema下的对象。

Note

权限校验基于用户,切换current_schema不影响当前所登录用户的权限。

示例

-- 系统中存在sales1、sales2两个用户
-- 以sales1用户登录开启会话(当前schema为sales1)
conn sales1/1%2;

-- 创建area表(area表属于sales1)
DROP TABLE IF EXISTS area;
CREATE TABLE area
(area_no CHAR(2) NOT NULL,
 area_name VARCHAR2(60),
 DHQ VARCHAR2(20) DEFAULT 'ShenZhen' NOT NULL);
INSERT INTO area VALUES ('01','华东','Shanghai');
INSERT INTO area VALUES ('02','华西','Chengdu');
COMMIT;

SELECT area_no,area_name,DHQ FROM area;
AREA_NO AREA_NAME                  DHQ                   
------- -------------------------- -------------------
01      华东                       Shanghai             
02      华西                       Chengdu      

-- 修改current_schema为sales2
ALTER SESSION SET current_schema=sales2;

-- 不显示指定schema访问area表,默认为sales2.area,而sales2下并不存在area表
SELECT area_no,area_name,DHQ FROM area;
[1:15]YAS-02012 table or view does not exist

# 会话级系统配置参数

parameter_name可以指定为配置参数中的会话级参数。

示例(单机、共享集群部署)

-- 会话级参数date_format
SHOW PARAMETER date_format;
NAME                  VALUE   
--------------------- ------- 
DATE_FORMAT			  yyyy-mm-dd     
 
ALTER SESSION SET date_format='yyyy-mm-dd hh24:mi:ss';

SHOW PARAMETER date_format;
NAME                  VALUE   
--------------------- ------- 
DATE_FORMAT			  yyyy-mm-dd hh24:mi:ss 

-- 会话级参数ISOLATION_LEVEL
-- 设置会话的默认隔离级别为SERIALIZABLE。
ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;

-- 设置会话的默认隔离级别为READ COMMITTED。
ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;