
# ALTER SESSION
#### 功能描述
ALTER SESSION命令用于定义或修改那些对当前会话有影响的条件或参数。修改后的会话参数会一直保持，直到断开当前会话。
#### 注意事项
- 如果执行SET TRANSACTION之前没有执行START TRANSACTION，则事务立即结束，命令无法显示效果。
- 可以用START TRANSACTION里面声明所需要的transaction_mode(s)的方法来避免使用SET TRANSACTION。
 
#### 语法格式
- 设置会话的事务参数。
  ```
  ALTER SESSION SET [ SESSION CHARACTERISTICS AS ] TRANSACTION
      { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED } | { READ ONLY  | READ WRITE } } [, ...] ;
  ```
  
- 设置会话的其他运行时参数。
  ```
  ALTER SESSION SET 
      {{config_parameter { { TO  | =  }  { value | DEFAULT }
        | FROM CURRENT }} | CURRENT_SCHEMA [ TO | = ] { schema | DEFAULT }
        | TIME ZONE time_zone
        | SCHEMA schema
        | NAMES encoding_name
        | ROLE role_name PASSWORD 'password'
        | SESSION AUTHORIZATION { role_name PASSWORD 'password' | DEFAULT }
        | XML OPTION { DOCUMENT | CONTENT }
      } ;
  ```
  
 
#### 参数说明
表1ALTER SESSION参数说明 
| 参数                  | 描述                                                                                                                                                                                                                                                                                  | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|
| SESSION             | 声明的参数只对当前会话起作用。如果SESSION和LOCAL都没出现，则SESSION为缺省值。 如果在事务中执行了此命令，命令的产生影响将在事务回滚之后消失。如果该事务已提交，影响将持续到会话的结束，除非被另外一个SET命令重置参数。                                                               | -                                                                                                                                                                                                                                                                                                                                                                                                                        |
| config_parameter    | 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 说明： 部分通过SHOW ALL查看的参数不能通过SET设置。如max_datanodes。 | -                                                                                                                                                                                                                                                                                                                                                                                                                        |
| value               | config_parameter的新值。                                                                                                                                                                                                                                                                | 可以声明为字符串常量、标识符、数字，或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。                                                                                                                                                                                                                                                                                                                                                                     |
| TIME ZONE timezone  | 用于指定当前会话的本地时区。                                                                                                                                                                                                                                                                      | 有效的本地时区。该选项对应的运行时参数名称为TimeZone，DEFAULT缺省值为PRC。                                                                                                                                                                                                                                                                                                                                                                           |
| CURRENT_SCHEMA      | CURRENT_SCHEMA用于指定当前的模式。                                                                                                                                                                                                                                                            | 已存在的模式名称。                                                                                                                                                                                                                                                                                                                                                                                                                |
| SCHEMA schema       | 同CURRENT_SCHEMA。此处的schema是个字符串。 例如：set schema 'public';                                                                                                                              | -                                                                                                                                                                                                                                                                                                                                                                                                                        |
| NAMES encoding_name | 用于设置客户端的字符编码。等价于set client_encoding to encoding_name。                                                                                                                                                                                                                               | 有效的字符编码。该选项对应的运行时参数名称为client_encoding，默认编码为UTF8。                                                                                                                                                                                                                                                                                                                                                                         |
| XML OPTION option   | 用于设置XML的解析方式。                                                                                                                                                                                                                                                                       | - CONTENT（缺省）  - DOCUMENT   |
   
#### 示例
创建模式ds：
```
CREATE SCHEMA ds;
```
设置模式搜索路径：
```
SET SEARCH_PATH TO ds, public;
```
设置日期时间风格为传统的POSTGRES风格（日在月前）：
```
SET DATESTYLE TO postgres, dmy;
```
设置当前会话的字符编码为UTF8：
```
ALTER SESSION SET NAMES 'UTF8';
```
设置时区为加州伯克利：
```
SET TIME ZONE 'PST8PDT';
```
设置时区为意大利：
```
SET TIME ZONE 'Europe/Rome';
```
设置当前模式：
```
ALTER SESSION SET CURRENT_SCHEMA TO tpcds;
```
设置XML OPTION为DOCUMENT：
```
ALTER SESSION SET XML OPTION DOCUMENT;
```
创建角色joe，并设置会话的角色为joe：
```
CREATE ROLE joe WITH PASSWORD '{password}';
ALTER SESSION SET SESSION AUTHORIZATION joe PASSWORD '{password}';
```
切换到默认用户：
```
ALTER SESSION SET SESSION AUTHORIZATION default;
```
#### 相关链接
[SET](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0220.html)
