关键字过滤(KEYWORD_FILTER)
📄字数 1.3K
👁️阅读量 加载中...
引入版本
- v12.5.0:支持 CREATE TABLE之后的关键字处理。
- v12.1.8:支持 DML 语句中关键字过滤。
功能描述
KEYWORD_FILTER
用于过滤连接会话上的关键字。关键字过滤等价于添加双引号使用关键字。当过滤后的关键字出现在DML语句中,例如:SELECT/INSERT/UPDATE/DELETE/MERGE/CREATE TABLE,则被当作标识符处理。过滤后的关键字,可以作为表名、列表、别名使用;其他对象如库、模式、视图、序列、过程、函数等,不能使用。关键字过滤字符串中,多个关键字使用逗号,
分隔,区分大小写,禁止使用空格。
参数属性
属性 | 属性值 |
---|---|
参数类型 | VARCHAR |
默认值 | NULL |
取值范围 | - |
影响范围 | 会话级 |
修改方式 | 在线修改,立即生效 |
使用场景说明
注意
- 连接上配置关键字过滤后,此关键字相关DML语法将无法使用,如需使用相关语法只能通过无关键字过滤的连接执行。
- 将FROM/GROUP/ORDER/OR/AND关键字过滤后,相关SELECT将无法执行。
示例
- 连接字符串上设置关键字过滤。
sh
jdbc:xugu://localhost:5183/SYSTEM?USER=SYSDBA&PASSWORD=SYSDBA&KEYWORD_FILTER=TABLE
jdbc:xugu://localhost:5183/SYSTEM?USER=SYSDBA&PASSWORD=SYSDBA&KEYWORD_FILTER=TABLE,FUNCTION,CONSTANT
- 使用
SET
命令设置关键字过滤。
SQL
SQL> SET KEYWORD_FILTER TO 'TABLE';
Execute successful.
Use time:0 ms.
SQL> SET KEYWORD_FILTER TO 'TABLE,FUNCTION,CONSTANT';
Execute successful.
Use time:0 ms.
2.使用SHOW
查询当前会话关键字过滤。
sql
SQL> SHOW KEYWORD_FILTER
+---------------------------+
| KEYWORD_FILTER |
+---------------------------+
| ,TABLE,FUNCTION,CONSTANT, |
+---------------------------+
(1 row)
Use time:0 ms.
4.查询系统视图ALL_SESSIONS
字段KEYWORD_FILTER
。
sql
SQL> SELECT IP,KEYWORD_FILTER FROM ALL_SESSIONS;
+-----------+---------------------------+
| IP | KEYWORD_FILTER |
+-----------+---------------------------+
| 127.0.0.1 | ,TABLE,FUNCTION,CONSTANT, |
+-----------+---------------------------+
(1 row)
Use time:0 ms.
5.将关键字FROM
过滤,FROM
被当做标识符处理,建表成功,但SELECT查询失败。
sql
SQL> SET KEYWORD_FILTER TO 'FROM';
Execute successful.
Use time:0 ms.
SQL> CREATE TABLE from(id INTEGER, name VARCHAR(10));
Execute successful.
Use time:17 ms.
SQL> SELECT IP,KEYWORD_FILTER FROM ALL_SESSIONS;
Error: [E19132] 语法错误
[E19260 L1 C30] 期待符号: syntax error, unexpected IDENT, expecting end of file