当前位置:首页 > 问答 > 正文

后浪云OceanBase里那个ALTER SESSION命令到底怎么用,弄明白点操作细节啥的

ALTER SESSION这个命令,在OceanBase数据库里,说白了就是让你临时改变一下自己这个“连接”的工作环境,它不是去修改数据库里存着的数据,也不是去动表的结构,而是专门给你自己当前的这个会话“调设置”,你可以调一调日期显示的格式,改改语言环境,或者控制一下SQL语句怎么执行,最关键的一点是,你做的这个改动,只对你自己的这个连接窗口有效,你关掉窗口再重开,或者换个新窗口,设置就恢复成原来的样子了,不会影响到数据库服务器本身,更不会打扰到其他正在用数据库的人。

这个命令的基本样子长这样: ALTER SESSION SET 参数名 = 值;

下面我就根据OceanBase官方文档里提到的一些常见用法,给你讲讲具体怎么操作,注意些什么细节。

改日期和时间的显示格式

这个可能是最常用的场景之一,数据库里存的时间数据是‘2024-05-27 14:30:00’,但你就想看‘27-MAY-24’这种格式,这时候你就用NLS_DATE_FORMAT这个参数。 举个例子: ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY'; 执行完这条命令之后,你在这个会话里,所有查出来的日期字段,都会按照‘日-月份缩写-年’的两位年份来显示,但你要注意,这只是“看起来”的样子变了,数据本身没动,就像前面说的,你换个查询窗口,日期格式就又变回默认的了。

改数字的显示格式

后浪云OceanBase里那个ALTER SESSION命令到底怎么用,弄明白点操作细节啥的

跟日期类似,数字怎么显示也能调,比如你想让数字每三位加个逗号分隔,像这样1,000,000,用的参数是NLS_NUMERIC_CHARACTERS,但这个设置稍微绕一点,它是用来定义小数点和小数点分隔符的。 有些地方习惯用逗号当小数点,用空格当千分位分隔符,你可以这样设: ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ', '; 这个命令的意思是,把小数点设成逗号(,),把分组分隔符(千分位符)设成空格( ),设置成功后,数字1234567.89可能就会显示为“1 234 567,89”,这个得根据你的实际需要来设。

改排序规则

有时候你查数据,发现排序好像不按字母顺序来,或者对大小写的处理跟你想的不一样,这可能跟数据库的排序规则有关,你可以用NLS_SORT来临时改一下。 你想让查询结果按照二进制顺序来排,大小写敏感(也就是大写字母全在小写字母前面): ALTER SESSION SET NLS_SORT = 'BINARY'; 如果你想要不区分大小写的排序,可以设成类似‘BINARY_CI’这样的值(具体支持哪些值,得查OceanBase的文档),设完之后,你后面执行的ORDER BY排序就会按新的规则来。

控制SQL执行的行为

后浪云OceanBase里那个ALTER SESSION命令到底怎么用,弄明白点操作细节啥的

这类参数会影响数据库引擎处理你SQL语句的方式,比如有个参数叫OB_TRACE_INFO,这个在OceanBase文档里有提到,是用来设置跟踪信息的,你可以给它一个字符串,数据库在执行SQL时,会在内部记录一些跟踪信息,方便以后有问题的时候分析,不过这个一般是给更懂的人排查复杂问题用的,日常简单使用可能用不上。 用法类似:ALTER SESSION SET OB_TRACE_INFO = '你的跟踪信息标识';

事务相关的设置

虽然标准SQL里有些事务设置(比如SET TRANSACTION),但ALTER SESSION也能管一些事务方面的行为,你可以设置事务的隔离级别(Isolation Level),不过这个语法在OceanBase里可能需要确认一下具体怎么写,这里只是告诉你有这么一类用途。

操作时需要注意的几个细节:

  • 参数名和值要写对:参数名字一般都是大写的,值如果是字符串,要用单引号括起来,数字或者布尔值(TRUE/FALSE)可能不用,最保险的方法是去查一下OceanBase官方文档里对这个参数的详细说明。
  • 错误提示:如果你参数名拼错了,或者给了个系统不认识的值,OceanBase会直接给你报错,告诉你设置失败,你根据错误信息就能知道大概哪里出问题了。
  • 作用范围牢记于心:我再强调一遍,这个修改是会话级别的,你开两个数据库连接工具窗口(比如两个OBClient,或者两个DBeaver连接),在A窗口里改了设置,只会影响A窗口自己后续的操作,B窗口完全感觉不到,还是用原来的默认设置。
  • 不是所有参数都能改:有些系统级的参数是固定的,或者需要很高的权限(比如DBA权限)通过ALTER SYSTEM命令去改,你用ALTER SESSION是改不了的。
  • 怎么查当前设置:你可能会想,我怎么知道我当前会话的这些参数都是什么值呢?可以查询一些系统视图,比如OceanBase里,你可以试试查 SHOW VARIABLES LIKE '%参数名%‘; 或者 SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME = '参数名’; (具体视图名称可能略有不同,以官方文档为准)来查看当前会话的设置。

ALTER SESSION就是你对自己当前数据库操作环境进行“个性化定制”的一个工具,它很灵活,随改随用,关掉就失效,你把它理解成给你的数据库操作终端换主题、调字体大小就行了,不影响别人,也不破坏“房子”(数据库服务器)本身,多用几次,熟悉了常用参数,就能让你干活更顺手。