#ALTER SESSION

# 通用描述

ALTER SESSION用于动态地改变所在会话的属性,或一些会话级的系统配置。这些改变只在当前连接的会话中有效,会话断开后将恢复为初始值。

# 语句定义

alter session::=

syntax
ALTER SESSION set_clause

set_clause::=

syntax
SET parameter_name = parameter_value

# set_clause

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

其中,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;

# 会话属性参数

# current_schema

该参数为所在会话的当前schema属性。

schema是数据库对象的集合(即所有数据库对象被真实表述为schema.对象名),当用户访问某个数据库对象时,如未显式指定schema,则默认指定为当前schema。

当连接一个会话时,初始的current_schema为当前所登录用户对应的schema,通过ALTER SESSION语句可以动态地改变这个值。改变之后,所有在此会话中执行的SQL语句的默认schema均为修改后的current_schema。

Note

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

  • 当前所登录用户需拥有ALTER SESSION权限。

示例

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

-- 创建area表,默认schema为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
ALTER SESSION SET current_schema=sales2;

-- 默认schema被修改为sales2
SELECT area_no,area_name,DHQ FROM area;
[1:15]YAS-02012 table or view does not exist