{
  "MySQL": {
    "LightDB-MySQL": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "insert into person partition (p_12) (name, age, job) values ('Cart', 8, 'No');",
          "regexp": "INSERT\\s+INTO\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+PARTITION\\s*\\(",
          "recommend": "直接插入数据到父表，无法指定分区表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES on duplicate",
          "originExample": "INSERT INTO person partition (p_50) (name, age, job) \nVALUES ('John', 30, 'Engineer')\nON DUPLICATE KEY UPDATE age = VALUES(age), job = VALUES(job);",
          "regexp": "INSERT\\s+INTO\\s+[\\s\\S]+?\\s+ON\\s+DUPLICATE\\s+KEY\\s+(UPDATE|IGNORE)\\s+",
          "recommend": "使用ON CONFLICT (col) DO UPDATE子句代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] SELECT ON DUPLICATE",
          "originExample": "INSERT INTO person PARTITION (p_20, p_50) (name, age)\nSELECT name, age\nFROM kids_1\nON DUPLICATE KEY UPDATE age = VALUES(age);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INTO student VALUES \n  ('Chun', 'SQL', 75), ('Chun', 'Tuning', 73)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "update person, pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "UPDATE\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(?:\\s+(AS\\s+)?\\w+)?(\\s*,\\s*(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(?:\\s+(AS\\s+)?\\w+)?)+\\s+SET",
          "recommend": "不支持同时更新多个表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "update person partition (p_50),pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "UPDATE\\s+[\\s\\S]+\\s+PARTITION\\s*\\(",
          "recommend": "直接操作父表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "update t1 left join t2 on t1.id = t2.id set t1.name = t2.name;",
          "originExample": "",
          "regexp": "update\\b[\\s\\S]+?\\b(left|right|inner|cross)\\s+join\\b[\\s\\S]+?\\bset",
          "recommend": "LightDB 不支持此语法，改成 UPDATE t1 set t1.name = (select ...) 语句",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "REPLACE INTO VALUES",
          "originExample": "REPLACE INTO person (name, age, job) VALUES ('John', 25, 'Nurse');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "REPLACE INTO t1 SELECT * FROM",
          "originExample": "replace into person select * from pp;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "delete from person partition (p_50) where name = 'Wzy';",
          "regexp": "DELETE\\s+FROM\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+PARTITION\\s*\\(",
          "recommend": "DELETE FROM时直接使用分区表名，放弃PARTITION",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2\nWHERE a1.id=a2.id;",
          "originExample": "delete from p1, p2 using person as p1 inner join pp as p2 where p1.name = p2.name;",
          "regexp": "delete\\s+from\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(\\s*,\\s*(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?)*\\s+using\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?((inner|left|right|full)\\s+join\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?)+",
          "recommend": "使用子查询来删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "DELETE post FROM blog INNER JOIN post WHERE blog.id = post.blog_id;",
          "originExample": "delete pp from person inner join pp where person.name = pp.name;",
          "regexp": "delete\\s+(\\w+|\\`\\w+\\`)(\\s*,\\s*(\\w+|\\`\\w+\\`))*\\s+from\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?((inner|left|right|full)\\s+join\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?)+",
          "recommend": "使用子查询来删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tbl_name",
          "originExample": "",
          "regexp": "\\bLOAD\\s+DATA\\s+(LOW_PRIORITY|CONCURRENT|LOCAL\\s+)?INFILE\\b",
          "recommend": "COPY tbl_name FROM 'filename' WITH (FORMAT csv);",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IMPORT TABLE FROM",
          "originExample": "",
          "regexp": "\\bIMPORT\\s+TABLE\\s+FROM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT DELAYED",
          "originExample": "",
          "regexp": "\\bINSERT\\s+DELAYED\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD XML",
          "originExample": "",
          "regexp": "\\bLOAD\\s+XML\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK INSTANCE FOR BACKUP",
          "originExample": "",
          "regexp": "\\bLOCK\\s+INSTANCE\\s+FOR\\s+BACKUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNLOCK INSTANCE",
          "originExample": "",
          "regexp": "\\bUNLOCK\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK TABLES / UNLOCK TABLES",
          "originExample": "",
          "regexp": "\\b(LOCK|UNLOCK)\\s+TABLES\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "XA",
          "originExample": "",
          "regexp": "\\bXA\\s+(START|BEGIN|END|PREPARE|COMMIT|ROLLBACK|RECOVER)\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [LIMIT {[offset,] row_count | row_count OFFSET offset}]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "SET MAX_EXECUTION_TIME = <timeout_in_milliseconds>;",
          "originExample": "SET MAX_EXECUTION_TIME = 30000;\nselect /*+ MAX_EXECUTION_TIME(30000) */ * from kids;",
          "regexp": "\\bSET\\s+MAX_EXECUTION_TIME\\b",
          "recommend": "使用SET statement_timeout = <timeout_in_milliseconds>;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update/LOCK IN SHARE MODE [NOWAIT]",
          "originExample": "select * from kids lock in share mode;",
          "regexp": "\\block\\s+in\\s+share\\s+mode",
          "recommend": "使用SELECT  … FROM … WHERE … FOR SHARE;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= str_to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "select * from kids inner join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "select * from kids cross join kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name union select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join (select * from kids_2) as kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "select * from kids where age = (select max(age)/10 from kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT name,age FROM kids WHERE (name,age) IN (SELECT name,age FROM kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT name FROM kids WHERE EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT name FROM kids WHERE NOT EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "select AVG(kids_age) from (select SUM(age) as kids_age from kids group by name) as k;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "SELECT column1, column2, ...\nFROM table1\nWHERE condition1\nINTERSECT\nSELECT column1, column2, ...\nFROM table2\nWHERE condition2;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name intersect select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "select * from kids union select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "select * from kids union all select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "SELECT * FROM a\nEXCEPT\nSELECT * FROM b",
          "originExample": "select * from kids_2 except select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM kids\n   WHERE name='Jay'\n   UNION\n   SELECT c1.*\n   FROM kids AS c1, kids_2 AS c2\n   WHERE c1.name = c2.name OR c1.age = c2.age )\nSELECT * FROM ancestors;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "SELECT *\nFROM (\n  WITH cte AS (\n    SELECT column1, column2, ...\n    FROM table1\n    WHERE condition\n  )\n  SELECT *\n  FROM cte\n) AS dt",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "select * from kids where kids.name IN(with c2 as (select * from kids_2) select name from c2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "with k1 as (select * from kids),\nk2 as (select * from kids_2)\nselect * from k2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT HIGH_PRIORITY * FROM TABLE1",
          "originExample": "select high_priority * from child_1;",
          "regexp": "\\bhigh_priority\\b",
          "recommend": "使用提示\n/*+ MATERIALIZE */\n或\n/*+ NO_QUERY_OPTIMIZATION */\n以达到类似效果，请根据实际情况选用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "into_option: {\n    INTO OUTFILE 'file_name'\n        [CHARACTER SET charset_name]\n        export_options\n  | INTO DUMPFILE 'file_name'\n  | INTO var_name [, var_name] ",
          "originExample": "",
          "regexp": "\\binto\\s+(outfile|dumpfile|@\\w+)+",
          "recommend": "使用copy ... to …或命令行导出工具；使用DECLARE声明变量后再使用，不支持@变量",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STRAIGHT_JOIN",
          "originExample": "select * from t2 straight_join t1 on t2.a = t1.a;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": "阻断"
        },
        {
          "desc": "information_schema库",
          "syntax": "information_schema",
          "originExample": "SELECT\n  TABLE_SCHEMA,\n  TABLE_NAME,\n  ENGINE,\n  TABLE_ROWS,\n  AVG_ROW_LENGTH,\n  INDEX_LENGTH\nFROM\n  information_schema.TABLES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "information_schema.STATISTICS",
          "originExample": "SELECT\n  *\nFROM\n  information_schema.STATISTICS;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "create index idx on test(name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name SELECT",
          "originExample": "create table kids_1 select * from kids;",
          "regexp": "create\\s+(temporary\\s+)?table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+select",
          "recommend": "使用CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table LIKE old_table_name",
          "originExample": "create table kids_3 like kids_2;",
          "regexp": "create\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+like",
          "recommend": "使用CREATE TABLE …AS SELECT * FROM …",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE sales1 (\n      id INT AUTO_INCREMENT,\n      sale_date DATE,\n      product VARCHAR(50),\n      revenue DECIMAL(10, 2),\n      PRIMARY KEY (id, sale_date)\n) PARTITION BY RANGE COLUMNS(sale_date) (\n      PARTITION p2020 VALUES LESS THAN ('2021-01-01'),\n      PARTITION p2021 VALUES LESS THAN ('2022-01-01'),\n      PARTITION p2022 VALUES LESS THAN ('2023-01-01'),\n      PARTITION p2023 VALUES LESS THAN ('2024-01-01'),\n      PARTITION p2024 VALUES LESS THAN ('2025-01-01')\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD COLUMN col_name column_definition",
          "originExample": "ALTER TABLE person2 ADD COLUMN birth varchar(50);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "alter table children add constraint id_pk primary key(id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": " alter table students drop constraint yy;",
          "originExample": "alter table children drop constraint id_pk;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "alter table person truncate partition p_12;",
          "regexp": "ALTER\\s+TABLE\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+TRUNCATE\\s+PARTITION",
          "recommend": "直接 TRUNCATE TABLE 表分区",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "alter table person add partition (partition p_110 values less than (110));",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+add\\s+partition\\s*",
          "recommend": "使用CREATE TABLE ... PARTITION OF … FOR VALUES FROM (...) TO (...);添加新的分区表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t REMOVE PARTITIONING",
          "originExample": "alter table t remove partitioning;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+remove\\s+partitioning",
          "recommend": "使用ALTER TABLE … DETACH PARTITION…移除分区表，再将数据还原回父表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;",
          "originExample": "alter table person modify sex int;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME TABLE a TO b\nALTER TABLE t RENAME TO t1",
          "originExample": "rename table test to t;",
          "regexp": "rename\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+to\\s+",
          "recommend": "使用ALTER TABLE … RENAME TO …",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX index_name ON tbl_name\nALTER TALBE DROP INDEX",
          "originExample": "drop index idx on test;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+drop\\s+index",
          "recommend": "使用 DROP INDEX语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "alter table person drop partition p_110;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+drop\\s+partition\\s+",
          "recommend": "可直接DROP TABLE 分区表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表设置字符集",
          "syntax": "",
          "originExample": "",
          "regexp": "create\\s+table[\\s\\S]+default\\s+charset\\s*=\\s*utf8",
          "recommend": "LightDB 建议 utf8字符集 但是支持库级别字符集",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER EVENT",
          "originExample": "",
          "regexp": "\\bALTER\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER FUNCTION",
          "originExample": "",
          "regexp": "\\bALTER\\s+FUNCTION\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER INSTANCE",
          "originExample": "",
          "regexp": "\\bALTER\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bALTER\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER PROCEDURE",
          "originExample": "",
          "regexp": "\\bALTER\\s+PROCEDURE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SERVER",
          "originExample": "",
          "regexp": "\\bALTER\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE EVENT",
          "originExample": "",
          "regexp": "\\bCREATE\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "定时任务，可以定时执行数据库的命令，\nMySQL 通过 event实现， LightDB 通过 lt_cron 插件实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE FUNCTION",
          "originExample": "",
          "regexp": "\\bCREATE\\s+(AGGREGATE\\s+)?FUNCTION\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bCREATE\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE PROCEDURE",
          "originExample": "",
          "regexp": "CREATE\\s+(DEFINER\\s*=\\s*.+?\\s+)?PROCEDURE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SERVER",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE TRIGGER",
          "originExample": "",
          "regexp": "\\bCREATE\\s+(DEFINER\\s*=\\s*.+?\\s+)?TRIGGER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP EVENT",
          "originExample": "",
          "regexp": "\\bDROP\\s+EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP FUNCTION",
          "originExample": "",
          "regexp": "\\bDROP\\s+FUNCTION\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bDROP\\s+LOGFILE\\s+GROUP",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP PROCEDURE",
          "originExample": "",
          "regexp": "\\bDROP\\s+PROCEDURE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SERVER",
          "originExample": "",
          "regexp": "\\bDROP\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bDROP\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP TRIGGER",
          "originExample": "",
          "regexp": "\\bDROP\\s+TRIGGER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS()",
          "originExample": "select abs(-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BIT_AND",
          "originExample": "SELECT BIT_AND(x)\nFROM (\n    SELECT 4 x\n    UNION\n    SELECT 5 x\n    UNION\n    SELECT 6 x\n) t;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL()",
          "originExample": "SELECT CEIL(2.132);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP()",
          "originExample": "SELECT EXP(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT FLOOR(1.23), FLOOR(-1.23);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(234, 10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "SELECT POWER (2,-2);\nSELECT POW(2,-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "RAND()",
          "originExample": "SELECT RAND();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND()",
          "originExample": "SELECT ROUND(1.298, 0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "SELECT SIGN(-32);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "SELECT SQRT(4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNCATE()",
          "originExample": "SELECT TRUNCATE(1.223,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null or\nx = ''",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHAR()",
          "originExample": "SELECT CHAR(123);",
          "regexp": "",
          "recommend": "不兼容但可能存在误扫，不扫描",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT()",
          "originExample": "SELECT CONCAT('123', '456');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT lower('AAA');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "SELECT LPAD('hi',4,'??');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "SELECT LTRIM('  barbar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);",
          "regexp": "\\bREGEXP_REPLACE\\s*\\(",
          "recommend": "不支持REGEXP_REPLACE 函数。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "\\bREGEXP_SUBSTR\\s*\\(",
          "recommend": "不支持REGEXP_SUBSTR函数。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "SELECT REPLACE('JACK and JUE','J','BL');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "SELECT RPAD('hi',5,'?');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('barbar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('Sakila' FROM -4 FOR 2);",
          "regexp": "\\bsubstr\\s*\\([^)]*\\s+(from|for)[^)]*\\)",
          "recommend": "不支持FOR、FROM，请使用SUBSTRING代替，或不使用FROM FOR关键字",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "SELECT TRIM('  bar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "SELECT UPPER('Hej');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE",
          "originExample": "SELECT REVERSE('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII()",
          "originExample": "SELECT ASCII('dx');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR()",
          "originExample": "SELECT INSTR('foobarbar', 'bar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CHAR_LENGTH()",
          "originExample": "SELECT CHAR_LENGTH('dolphin');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR()",
          "originExample": "SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');",
          "regexp": "\\bREGEXP_INSTR\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_ADD('2008-01-02', INTERVAL 1 MONTH)\nDATE_SUB",
          "originExample": "SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURDATE()/CURRENT_DATE()",
          "originExample": "SELECT CURRENT_DATE();",
          "regexp": "\\b(CURRENT_DATE|CURDATE)\\s*\\(",
          "recommend": "使用CURRENT_DATE，不要带括号",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP()",
          "originExample": "SELECT CURRENT_TIMESTAMP();",
          "regexp": "\\bCURRENT_TIMESTAMP\\s*\\(",
          "recommend": "使用CURRENT_TIMESTAMP，不要带括号。\n或者使用NOW()函数。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURTIME()/CURRENT_TIME()",
          "originExample": "SELECT CURRENT_TIME();",
          "regexp": "\\b(CURRENT_TIME|CURTIME)\\s*\\(",
          "recommend": "使用CURRENT_TIME，不要带括号",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT()",
          "originExample": "SELECT EXTRACT(YEAR FROM '2019-07-02');",
          "regexp": "\\bEXTRACT\\s*\\([^)]*\\s+from",
          "recommend": "from后的参数必须指定类型(timestamp、date、time或interval)",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY('2003-02-05');",
          "regexp": "\\bLAST_DAY\\s*\\(",
          "recommend": "不支持LAST_DAY函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "PERIOD_DIFF",
          "originExample": "SELECT PERIOD_DIFF(200802,200703);",
          "regexp": "\\bperiod_diff\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE(DATE_FORMAT(date,format))",
          "originExample": "SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NOW()\nSYSDATE()",
          "originExample": "SELECT SYSDATE(), NOW();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST('2020-12-12 12:12:12' AS DATETIME(秒后小数点位数))",
          "originExample": "SELECT CAST('2017-08-29 12:10:08.2235' AS DATETIME);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(34.0,3.0,5.0,767.0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "conv('101',2,10)",
          "originExample": "SELECT CONV('a',16,2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST()",
          "originExample": "SELECT CAST('100.5678' AS SIGNED);",
          "regexp": "\\bCAST\\s*\\([^\\)]+?\\bAS\\s*SIGNED\\s*\\)",
          "recommend": "为兼容 MySQL的 cast表达式，可以通过 create domain来支持 signed。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SEC_TO_TIME()",
          "originExample": "SELECT SEC_TO_TIME(2378);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_FORMAT",
          "originExample": "SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %W');",
          "regexp": "\\bDATE_FORMAT\\s*\\([^)]*(%v|%x)+[^)]*\\)",
          "recommend": "不支持以下模板：%V %v %X %x",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IF",
          "originExample": "SELECT IF(1>2,2,3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "SELECT COALESCE(NULL,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(1,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IFNULL",
          "originExample": "SELECT IFNULL(NULL,10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UUID()",
          "originExample": "SELECT UUID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_USER()\nUSER() ",
          "originExample": "SELECT USER();\nSELECT CURRENT_USER();",
          "regexp": "\\b(USER|CURRENT_USER)\\s*\\(",
          "recommend": "不要加括号",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "SELECT AVG(age) FROM PERSON;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM PERSON; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "CREATE TABLE scores (\n    name VARCHAR(20) PRIMARY KEY,\n    score INT NOT NULL\n);\n\nINSERT INTO\n scores(name, score)\nVALUES\n ('Smith',81),\n ('Jones',55),\n ('Williams',55),\n ('Taylor',62),\n ('Brown',62),\n ('Davies',84),\n ('Evans',87),\n ('Wilson',72),\n ('Thomas',72),\n ('Johnson',100); \n\nSELECT\n name,\n    score,\n    ROW_NUMBER() OVER (ORDER BY score) row_num,\n    CUME_DIST() OVER (ORDER BY score) cume_dist_val\nFROM\n scores; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "CREATE TABLE rankDemo (\n    val INT\n);\n \nINSERT INTO rankDemo(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    DENSE_RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "select MAX(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "select MIN(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "CREATE TABLE sales (\n  id INT AUTO_INCREMENT PRIMARY KEY,\n  product VARCHAR(50),\n  revenue DECIMAL(10, 2)\n);\n\nINSERT INTO sales (product, revenue)\nVALUES\n  ('Product A', 1000.00),\n  ('Product B', 1500.00),\n  ('Product C', 2000.00),\n  ('Product D', 2500.00),\n  ('Product E', 3000.00);\n\nSELECT\n  product,\n  revenue,\n  PERCENT_RANK() OVER (ORDER BY revenue)\nFROM sales;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "CREATE TABLE rankDemo2 (\n    val INT\n);\n \nINSERT INTO rankDemo2(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo2; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": " SELECT STDDEV(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": " SELECT STDDEV_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": " SELECT STDDEV_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT sum(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE()",
          "originExample": "SELECT\n*\nFROM\nJSON_TABLE(\n '[ {\"c1\": null} ]',\n'$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON\nERROR )\n) AS jt;",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "使用jsonb_to_recordset",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE()",
          "originExample": "SELECT JSON_VALUE('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname');",
          "regexp": "\\bJSON_VALUE\\s*\\(",
          "recommend": "使用jsonb_extract_path_text",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY()",
          "originExample": "SELECT JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME());",
          "regexp": "\\bJSON_ARRAY\\s*\\(",
          "recommend": "使用jsonb_build_array",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG()",
          "originExample": "select json_arrayagg(name) from person;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "使用jsonb_agg",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT()",
          "originExample": "SELECT JSON_OBJECT('id', 87, 'name', 'carrot');",
          "regexp": "\\bJSON_OBJECT\\s*\\(",
          "recommend": "使用jsonb_build_object",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG()",
          "originExample": "CREATE TABLE t_json(c VARCHAR(10), i INT);\n\nINSERT INTO t_json VALUES ('key', 3), ('key', 4), ('key', 5);\n\nSELECT JSON_OBJECTAGG(c, i) FROM t_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "使用jsonb_object_agg",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GROUP_CONCAT()",
          "originExample": "select group_concat(age) from person;",
          "regexp": "\\bGROUP_CONCAT\\s*\\([^\\)]+(\\,[^\\)]+)+\\)",
          "recommend": "在两个及以上参数时不支持，需要用 concat 先拼接",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE  ntileDemo (\n    val INT NOT NULL\n);\n \nINSERT INTO ntileDemo(val) \nVALUES(1),(2),(3),(4),(5),(6),(7),(8),(9);\n\nSELECT \n    val, \n    NTILE(4) OVER (\n        ORDER BY val\n    ) group_no\nFROM \n    ntileDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "CREATE TABLE basic_pays(\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    salary INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n \nINSERT INTO \n basic_pays(employee_name, \n    department, \n    salary)\nVALUES\n ('Diane Murphy','Accounting',8435),\n ('Mary Patterson','Accounting',9998),\n ('Jeff Firrelli','Accounting',8992),\n ('William Patterson','Accounting',8870),\n ('Gerard Bondur','Accounting',11472),\n ('Anthony Bow','Accounting',6627),\n ('Leslie Jennings','IT',8113),\n ('Leslie Thompson','IT',5186),\n ('Julie Firrelli','Sales',9181),\n ('Steve Patterson','Sales',9441),\n ('Foon Yue Tseng','Sales',6660),\n ('George Vanauf','Sales',10563),\n ('Loui Bondur','SCM',10449),\n ('Gerard Hernandez','SCM',6949),\n ('Pamela Castillo','SCM',11303),\n ('Larry Bott','SCM',11798),\n ('Barry Jones','SCM',10586); \n\nSELECT\n    employee_name,\n    salary,\n    NTH_VALUE(employee_name, 2) OVER  (\n        ORDER BY salary DESC\n    ) second_highest_salary\nFROM\n    basic_pays; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE()",
          "originExample": "CREATE TABLE overtime (\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    hours INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n\nINSERT INTO overtime(employee_name, department, hours)\nVALUES('Diane Murphy','Accounting',37),\n('Mary Patterson','Accounting',74),\n('Jeff Firrelli','Accounting',40),\n('William Patterson','Finance',58),\n('Gerard Bondur','Finance',47),\n('Anthony Bow','Finance',66),\n('Leslie Jennings','IT',90),\n('Leslie Thompson','IT',88),\n('Julie Firrelli','Sales',81),\n('Steve Patterson','Sales',29),\n('Foon Yue Tseng','Sales',65),\n('George Vanauf','Marketing',89),\n('Loui Bondur','Marketing',49),\n('Gerard Hernandez','Marketing',66),\n('Pamela Castillo','SCM',96),\n('Larry Bott','SCM',100),\n('Barry Jones','SCM',65); \n\nSELECT\n    employee_name,\n    hours,\n    FIRST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "SELECT\n    employee_name,\n    LAG(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE()",
          "originExample": "SELECT\n    employee_name,\n    hours,\n    LAST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT\n    employee_name,\n    LEAD(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "find_in_set",
          "originExample": "SELECT FIND_IN_SET('b','a,b,c,d');",
          "regexp": "",
          "recommend": "LightDB的 find_in_set 不能用\n在 where 后，其他都与 MySQL相同\nwhere[\\s\\S]+FIND_IN_SET\\b",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "crc32",
          "originExample": "",
          "regexp": "\\bcrc32\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "仅日期部分相减",
          "syntax": "datediff",
          "originExample": "SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FROM_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "指定位置替换字符串,replace模式",
          "syntax": "insert",
          "originExample": "SELECT INSERT('Quadratic', 3, 4, 'What');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "是否IPV4",
          "syntax": "IS_IPV4",
          "originExample": "",
          "regexp": "\\bIS_IPV4\\s*\\(",
          "recommend": "使用inet_same_family函数判断两个ip地址是否为相同地址族，以此判断是否为ipv4",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_IPV6",
          "originExample": "",
          "regexp": "\\bIS_IPV6\\s*\\(",
          "recommend": "使用family函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "md5",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回从过去的日期开始的月份",
          "syntax": "month",
          "originExample": "SELECT MONTH('2008-02-03');",
          "regexp": "\\bmonth\\s*\\(",
          "recommend": "使用EXTRACT函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回月份的名称",
          "syntax": "MONTHNAME",
          "originExample": "SELECT MONTHNAME('2008-02-03');",
          "regexp": "\\bmonthname\\s*\\(",
          "recommend": "使用to_char函数，且转换前必须为date类型",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_INSERT_ID()",
          "originExample": "SELECT LAST_INSERT_ID();",
          "regexp": "\\bLAST_INSERT_ID\\s*\\(",
          "recommend": "使用LASTVAL()",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONVERT()",
          "originExample": "",
          "regexp": "\\bCONVERT\\s*\\(",
          "recommend": "可以使用CAST函数或::操作符来实现数据类型转换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AES_DECRYPT()/AES_ENCRYPT()",
          "originExample": "",
          "regexp": "\\b(AES_DECRYPT|AES_ENCRYPT)\\s*\\(",
          "recommend": "可以使用pgp_sym_decrypt函数和对称加密算法来解密数据，计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNHEX()",
          "originExample": "",
          "regexp": "\\bUNHEX\\s*\\(",
          "recommend": "可以使用decode函数将十六进制字符串解码为二进制数据",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "HEX()",
          "originExample": "",
          "regexp": "\\bHEX\\s*\\(",
          "recommend": "可以使用encode函数将二进制数据编码为十六进制字符串",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD_FILE()",
          "originExample": "",
          "regexp": "\\bLOAD_FILE\\s*\\(",
          "recommend": "可以使用外部表功能来实现类似的文件加载功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MATCH()",
          "originExample": "",
          "regexp": "\\bMATCH\\s*\\(",
          "recommend": "可以使用全文搜索索引来实现类似的全文搜索功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SOUNDEX()",
          "originExample": "",
          "regexp": "\\bSOUNDEX\\s*\\(",
          "recommend": "可以通过安装和使用phonetics扩展来实现类似的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADDTIME()",
          "originExample": "",
          "regexp": "\\bADDTIME\\s*\\(",
          "recommend": "可以使用时间间隔运算符+来将时间和时间间隔相加",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYNAME()",
          "originExample": "",
          "regexp": "\\bDAYNAME\\s*\\(",
          "recommend": "可以使用to_char()函数和日期格式模板来获取日期对应的星期几名称",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFMONTH()",
          "originExample": "",
          "regexp": "\\bDAYOFMONTH\\s*\\(",
          "recommend": "可以使用EXTRACT()函数和适当的参数来获取日期的月份中的天数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFYEAR()",
          "originExample": "",
          "regexp": "\\bDAYOFYEAR\\s*\\(",
          "recommend": "可以使用EXTRACT()函数和适当的参数来获取日期在一年中的天数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ExtractValue()",
          "originExample": "",
          "regexp": "\\bExtractValue\\s*\\(",
          "recommend": "可以使用XML函数和XPath查询来处理XML数据",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UpdateXML()",
          "originExample": "",
          "regexp": "\\bUpdateXML\\s*\\(",
          "recommend": "可以使用XML函数和操作符来处理和更新XML数据",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANDOM_BYTES()",
          "originExample": "",
          "regexp": "\\bRANDOM_BYTES\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA1()",
          "originExample": "",
          "regexp": "\\bSHA1\\s*\\(",
          "recommend": "可以使用digest()函数和适当的哈希算法来计算字符串的哈希值",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA()",
          "originExample": "",
          "regexp": "\\bSHA\\s*\\(",
          "recommend": "可以使用digest()函数和适当的哈希算法来计算字符串的哈希值",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA2()",
          "originExample": "",
          "regexp": "\\bSHA2\\s*\\(",
          "recommend": "可以使用digest()函数和适当的哈希算法来计算字符串的哈希值",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "可以使用octet_length()函数来获取压缩数据解压缩后的字节长度",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "可以通过自定义密码策略和适当的方法来评估密码的强度",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GET_LOCK()",
          "originExample": "",
          "regexp": "\\bGET_LOCK\\s*\\(",
          "recommend": "可以使用数据库事务和行级锁来实现锁的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_FREE_LOCK()",
          "originExample": "",
          "regexp": "\\bIS_FREE_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现类似的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_USED_LOCK()",
          "originExample": "",
          "regexp": "\\bIS_USED_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现类似的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_ALL_LOCKS()",
          "originExample": "",
          "regexp": "\\bRELEASE_ALL_LOCKS\\s*\\(",
          "recommend": "可以通过执行COMMIT或ROLLBACK语句来释放当前会话中持有的所有锁",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_LOCK()",
          "originExample": "",
          "regexp": "\\bRELEASE_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现释放指定锁的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MASTER_POS_WAIT()",
          "originExample": "",
          "regexp": "\\bMASTER_POS_WAIT\\s*\\(",
          "recommend": "可以通过配置逻辑复制和逻辑解码来实现等待指定二进制日志位置被复制的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NAME_CONST()",
          "originExample": "",
          "regexp": "\\bNAME_CONST\\s*\\(",
          "recommend": "可以使用SELECT语句和常量值来实现返回常量值的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIT_XOR()",
          "originExample": "",
          "regexp": "\\bBIT_XOR\\b",
          "recommend": "可以使用位运算符^来执行按位异或操作",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回日期或日期时间表达式",
          "syntax": "TIMESTAMP()",
          "originExample": "",
          "regexp": "\\bTIMESTAMP\\s+\\(",
          "recommend": "可改成 cast 调用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "整除 / 求余",
          "syntax": "DIV / MOD",
          "originExample": "select 9 div 2;\nselect 9 mod 2;",
          "regexp": "\\s+(DIV|MOD)\\s+",
          "recommend": "求整除数可使用 / 配合floor函数；求余可使用%或mod()函数；",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "安全等于运算符\n严格比较两个NULL值是否相等。",
          "syntax": "<=>",
          "originExample": "select null <=> null;",
          "regexp": "\\s*<=>\\s*",
          "recommend": "运算结果与MySQL不一致，可尝试使用 IS 比较null",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "异或",
          "syntax": "xor",
          "originExample": "select 1 xor 0;",
          "regexp": "\\s+XOR\\s+",
          "recommend": "可尝试用case when代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "与",
          "syntax": "&&",
          "originExample": "select 1 && 1;",
          "regexp": "\\s+\\&\\&\\s+",
          "recommend": "不支持&&，尝试使用AND代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "判断一个值是否存在于集合（数组）中的操作符",
          "syntax": "MEMBER OF()",
          "originExample": "SELECT 17 MEMBER OF('[23, \"abc\", 17, \"ab\", 10]');",
          "regexp": "\\bMEMBER\\s+OF\\s*\\(",
          "recommend": "不支持member of()，请尝试使用LIKE或正则代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回两个参数的弧切线",
          "syntax": "ATAN(x,y)",
          "originExample": "SELECT ATAN(-2,2);",
          "regexp": "\\bATAN\\s*\\(\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*,\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*\\)",
          "recommend": "使用ATAN2()",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将时间值（间隔）添加到日期值",
          "syntax": "ADDDATE()",
          "originExample": "SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "\\bADDDATE\\s*\\(",
          "recommend": "使用DATE_ADD函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从一个时区转换到另一个时区",
          "syntax": "CONVERT_TZ()",
          "originExample": "SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');",
          "regexp": "\\bCONVERT_TZ\\s*\\(",
          "recommend": "不支持该函数，可尝试使用AT TIME ZONE转换时区",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "天数值转换为日期",
          "syntax": "FROM_DAYS()",
          "originExample": "SELECT FROM_DAYS(730669);",
          "regexp": "\\bFROM_DAYS\\s*\\(",
          "recommend": "不支持该函数，可尝试DATE '0001-01-01' + INTERVAL '737850 days'的方式",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回日期格式字符串",
          "syntax": "GET_FORMAT()",
          "originExample": "SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));",
          "regexp": "\\bGET_FORMAT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "提取小时",
          "syntax": "HOUR()",
          "originExample": "SELECT HOUR('10:05:03');",
          "regexp": "\\bHOUR\\s*\\(",
          "recommend": "可尝试EXTRACT(HOUR FROM TIME '09:45:30')方式",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "本地时间，同NOW()",
          "syntax": "LOCALTIME()/LOCALTIMESTAMP()",
          "originExample": "SELECT LOCALTIME();\nSELECT LOCALTIMESTAMP();",
          "regexp": "\\b(LOCALTIME|LOCALTIMESTAMP)\\s*\\(",
          "recommend": "可以使用NOW()函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从年份和年份中的某一天创建日期",
          "syntax": "MAKEDATE()",
          "originExample": "SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);",
          "regexp": "\\bMAKEDATE\\s*\\(",
          "recommend": "可以使用日期函数+运算实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从小时、分钟、秒创建时间",
          "syntax": "MAKETIME()",
          "originExample": "SELECT MAKETIME(12,15,30);",
          "regexp": "\\bMAKETIME\\s*\\(",
          "recommend": "可以直接使用时间字面量，或者make_time函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从参数返回微秒",
          "syntax": "MICROSECOND()",
          "originExample": "SELECT MICROSECOND('12:00:00.123456');",
          "regexp": "\\bMICROSECOND\\s*\\(",
          "recommend": "使用EXTRACT函数提取微秒",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从参数中返回分钟",
          "syntax": "MINUTE()",
          "originExample": "SELECT MINUTE('2008-02-03 10:05:03');",
          "regexp": "\\bMINUTE\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "给期间添加特定的月数",
          "syntax": "PERIOD_ADD()",
          "originExample": "SELECT PERIOD_ADD(200801,2);",
          "regexp": "\\bPERIOD_ADD\\s*\\(",
          "recommend": "使用日期和时间函数以及算术运算来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从日期参数返回季度",
          "syntax": "QUARTER()",
          "originExample": "SELECT QUARTER('2008-04-01');",
          "regexp": "\\bQUARTER\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回秒数",
          "syntax": "SECOND()",
          "originExample": "SELECT SECOND('10:05:03');",
          "regexp": "\\bSECOND\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用三个参数调用时 DATE_SUB（） 的同义词",
          "syntax": "SUBDATE()",
          "originExample": "SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "\\bSUBDATE\\s*\\(",
          "recommend": "使用日期运算实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "减去时间",
          "syntax": "SUBTIME()",
          "originExample": "SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');",
          "regexp": "\\bSUBTIME\\s*\\(",
          "recommend": "使用日期运算实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "提取传递的表达式的时间部分",
          "syntax": "TIME()",
          "originExample": "SELECT TIME('2003-12-31 01:02:03');",
          "regexp": "\\bTIME\\s*\\(",
          "recommend": "使用CAST函数实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "格式化为时间",
          "syntax": "TIME_FORMAT()",
          "originExample": "SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');",
          "regexp": "\\bTIME_FORMAT\\s*\\(",
          "recommend": "可尝试使用TO_CHAR函数实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向日期时间表达式添加间隔",
          "syntax": "TIMESTAMPADD()",
          "originExample": "SELECT TIMESTAMPADD(MINUTE, 1, '2003-01-02');",
          "regexp": "\\bTIMESTAMPADD\\s*\\(",
          "recommend": "使用日期运算实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期",
          "syntax": "UTC_DATE()",
          "originExample": "SELECT UTC_DATE(), UTC_DATE() + 0;",
          "regexp": "\\bUTC_DATE\\b",
          "recommend": "使用CURRENT_DATE AT TIME ZONE 'UTC'代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 时间",
          "syntax": "UTC_TIME()",
          "originExample": "SELECT UTC_TIME, UTC_TIME() + 0;",
          "regexp": "\\bUTC_TIME\\b",
          "recommend": "使用日期和时间函数以及时区设置来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期和时间",
          "syntax": "UTC_TIMESTAMP()",
          "originExample": "SELECT UTC_TIMESTAMP, UTC_TIMESTAMP() + 0;",
          "regexp": "\\bUTC_TIMESTAMP\\b",
          "recommend": "使用日期和时间函数以及时区设置来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回周数",
          "syntax": "WEEK()",
          "originExample": "SELECT WEEK('2008-12-31',1);",
          "regexp": "\\bWEEK\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回工作日索引",
          "syntax": "WEEKDAY()",
          "originExample": "SELECT WEEKDAY('2008-02-03 22:23:00');",
          "regexp": "\\bWEEKDAY\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回年份和星期",
          "syntax": "YEARWEEK()",
          "originExample": "SELECT YEARWEEK('1987-01-01');",
          "regexp": "\\bYEARWEEK\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的二进制表示形式",
          "syntax": "BIN()",
          "originExample": "SELECT BIN(12);",
          "regexp": "\\bBIN\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，以便对于值位中设置的每个位，您 获取一个 ON 字符串，对于每个未设置的位，您都会得到一个 OFF 字符串",
          "syntax": "EXPORT_SET()",
          "originExample": "SELECT EXPORT_SET(5,'Y','N',',',4);",
          "regexp": "\\bEXPORT_SET\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回格式化为指定小数位数的数字",
          "syntax": "FORMAT()",
          "originExample": "SELECT FORMAT(12332.123456, 4);",
          "regexp": "\\bFORMAT\\s*\\(",
          "recommend": "可尝试使用TO_CHAR函数实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回一组逗号分隔的字符串，这些字符串具有 位中的相应位集",
          "syntax": "MAKE_SET()",
          "originExample": "SELECT MAKE_SET(1,'a','b','c');",
          "regexp": "\\bMAKE_SET\\s*\\(",
          "recommend": "使用位操作函数和条件表达式来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "REGEXP 的否定",
          "syntax": "NOT REGEXP",
          "originExample": "SELECT 'a' NOT REGEXP '^[a-d]';",
          "regexp": "\\bNOT\\s+REGEXP\\b",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP",
          "originExample": "SELECT 'a' REGEXP '^[a-d]';",
          "regexp": "\\s+REGEXP\\s+",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "RLIKE",
          "originExample": "SELECT 'a' RLIKE '^[a-d]';",
          "regexp": "\\s+RLIKE\\s+",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的八进制表示形式",
          "syntax": "OCT()",
          "originExample": "SELECT OCT(12);",
          "regexp": "\\bOCT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数最左边字符的字符代码",
          "syntax": "ORD()",
          "originExample": "SELECT ORD('2');",
          "regexp": "\\bORD\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "转义参数以在 SQL 语句中使用",
          "syntax": "QUOTE()",
          "originExample": "SELECT QUOTE('Don\\'t!');",
          "regexp": "\\bQUOTE\\s*\\(",
          "recommend": "不支持该函数，可尝试使用quote_literal函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP_LIKE()",
          "originExample": "SELECT REGEXP_LIKE('CamelCase', 'CAMELCASE');",
          "regexp": "\\bREGEXP_LIKE\\s*\\(",
          "recommend": "可使用正则表达式操作符 ~ ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "比较soundex()值",
          "syntax": "SOUNDS LIKE",
          "originExample": "expr1 SOUNDS LIKE expr2\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).",
          "regexp": "\\bSOUNDS\\s+LIKE\\b",
          "recommend": "不支持sounds like",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从指定数量的 分隔符的出现次数",
          "syntax": "SUBSTRING_INDEX()",
          "originExample": "SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);",
          "regexp": "\\bSUBSTRING_INDEX\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回字符串的权重字符串",
          "syntax": "WEIGHT_STRING()",
          "originExample": "SELECT WEIGHT_STRING('ab'); ",
          "regexp": "\\bWEIGHT_STRING\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回设置的位数",
          "syntax": "BIT_COUNT()",
          "originExample": "SELECT BIT_COUNT(64);",
          "regexp": "\\bBIT_COUNT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "计算语句摘要哈希值",
          "syntax": "STATEMENT_DIGEST()",
          "originExample": "SELECT STATEMENT_DIGEST('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "计算规范化语句摘要",
          "syntax": "STATEMENT_DIGEST_TEXT()",
          "originExample": "SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST_TEXT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回压缩前字符串的长度",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "确定密码的强度",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "SELECT VALIDATE_PASSWORD_STRENGTH('weak');",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重复执行表达式",
          "syntax": "BENCHMARK()",
          "originExample": "SELECT BENCHMARK(1000000,MD5('goodbye'));",
          "regexp": "\\bBENCHMARK\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的字符集",
          "syntax": "CHARSET()",
          "originExample": "SELECT CHARSET('abc');",
          "regexp": "\\bCHARSET\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则强制值",
          "syntax": "COERCIBILITY()",
          "originExample": "SELECT COERCIBILITY('abc');",
          "regexp": "\\bCOERCIBILITY\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则",
          "syntax": "COLLATION()",
          "originExample": "SELECT COLLATION('abc');",
          "regexp": "\\bCOLLATION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回连接的连接 ID（线程 ID）",
          "syntax": "CONNECTION_ID()",
          "originExample": "SELECT CONNECTION_ID();",
          "regexp": "\\bCONNECTION_ID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回当前活动角色",
          "syntax": "CURRENT_ROLE()",
          "originExample": "SELECT CURRENT_ROLE();",
          "regexp": "\\bCURRENT_ROLE\\s*\\(",
          "recommend": "直接使用CURRENT_ROLE，不带括号",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FOUND_ROWS()",
          "originExample": "SELECT FOUND_ROWS();",
          "regexp": "\\bFOUND_ROWS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "ICU 库版本",
          "syntax": "ICU_VERSION()",
          "originExample": "select ICU_VERSION();",
          "regexp": "\\bICU_VERSION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回表示内存角色子图的 GraphML 文档",
          "syntax": "ROLES_GRAPHML()",
          "originExample": "SELECT ROLES_GRAPHML();",
          "regexp": "\\bROLES_GRAPHML\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新的行数",
          "syntax": "ROW_COUNT()",
          "originExample": "SELECT ROW_COUNT();",
          "regexp": "\\bROW_COUNT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回默认（当前）数据库名称",
          "syntax": "SCHEMA()",
          "originExample": "SELECT SCHEMA();",
          "regexp": "\\bSCHEMA\\s*\\(",
          "recommend": "使用DATABASE()替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "客户端提供的用户名和主机名",
          "syntax": "SYSTEM_USER()",
          "originExample": "SELECT SYSTEM_USER();",
          "regexp": "\\bSYSTEM_USER\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeomCollection()",
          "originExample": "SELECT GeomCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeometryCollection()",
          "originExample": "SELECT GeometryCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从 Point 值构造 LineString",
          "syntax": "LineString()",
          "originExample": "SELECT LineString(Point(2, 2), Point(3, 3));",
          "regexp": "\\bLineString\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "一个几何图形的 MBR 是否包含另一个几何图形的 MBR",
          "syntax": "MBRContains()",
          "originExample": "SELECT MBRContains(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRContains\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否被另一个MBR覆盖",
          "syntax": "MBRCoveredBy()",
          "originExample": "SELECT MBRCoveredby(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCoveredBy\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否覆盖另一个MBR",
          "syntax": "MBRCovers()",
          "originExample": "SELECT MBRCovers(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCovers\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否不相交",
          "syntax": "MBRDisjoint()",
          "originExample": "SELECT MBRDisjoint(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRDisjoint\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否相等",
          "syntax": "MBREquals()",
          "originExample": "SELECT MBREquals(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBREquals\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的 MBR 是否相交",
          "syntax": "MBRIntersects()",
          "originExample": "SELECT MBRIntersects(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRIntersects\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否重叠",
          "syntax": "MBROverlaps()",
          "originExample": "SELECT MBROverlaps(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBROverlaps\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两种几何形状的MBR是否接触",
          "syntax": "MBRTouches()",
          "originExample": "SELECT MBRTouches(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRTouches\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "一个几何形状的 MBR 是否在另一个几何形状的 MBR 范围内",
          "syntax": "MBRWithin()",
          "originExample": "SELECT MBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRWithin\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从 LineString 值构造 MultiLineString",
          "syntax": "MultiLineString()",
          "originExample": "SELECT MultiLineString(\n    LineString(Point(2, 2), Point(3, 3)),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bMultiLineString\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从点值构造 MultiPoint",
          "syntax": "MultiPoint()",
          "originExample": "SELECT MultiPoint(\n    Point(1, 1),\n    Point(2, 2)\n);",
          "regexp": "\\bMultiPoint\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从多边形值构造 MultiPolygon",
          "syntax": "MultiPolygon()",
          "originExample": "SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';\nSELECT ST_Area(ST_GeomFromText(@mpoly));",
          "regexp": "\\bMultiPolygon\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将数据追加到 JSON 文档",
          "syntax": "JSON_ARRAY_APPEND()",
          "originExample": "",
          "regexp": "\\bJSON_ARRAY_APPEND\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入到 JSON 数组中",
          "syntax": "JSON_ARRAY_INSERT()",
          "originExample": "",
          "regexp": "\\bJSON_ARRAY_INSERT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档的最大深度",
          "syntax": "JSON_DEPTH()",
          "originExample": "",
          "regexp": "\\bJSON_DEPTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中的键数组",
          "syntax": "JSON_KEYS()",
          "originExample": "",
          "regexp": "\\bJSON_KEYS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "JSON文档中的元素数",
          "syntax": "JSON_LENGTH()",
          "originExample": "",
          "regexp": "\\bJSON_LENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE()",
          "originExample": "",
          "regexp": "\\bJSON_MERGE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，替换重复键的值",
          "syntax": "JSON_MERGE_PATCH()",
          "originExample": "",
          "regexp": "\\bJSON_MERGE_PATCH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE_PRESERVE()",
          "originExample": "",
          "regexp": "\\bJSON_MERGE_PRESERVE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "比较两个 JSON 文档，如果这些文档有任何 TRUE（1），则返回 TRUE （0） 键值对或数组元素相同，否则为 FALSE （<>）",
          "syntax": "JSON_OVERLAPS()",
          "originExample": "",
          "regexp": "\\bJSON_OVERLAPS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "引用 JSON 文档",
          "syntax": "JSON_QUOTE()",
          "originExample": "",
          "regexp": "\\bJSON_QUOTE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;如果出现以下情况，则返回 TRUE/1 document 根据架构进行验证，如果没有，则为 FALSE/0",
          "syntax": "JSON_SCHEMA_VALID()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;以 JSON 格式返回报告 验证结果的格式，包括成功或失败，以及 失败原因",
          "syntax": "JSON_SCHEMA_VALIDATION_REPORT()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALIDATION_REPORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中值的路径",
          "syntax": "JSON_SEARCH()",
          "originExample": "",
          "regexp": "\\bJSON_SEARCH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "JSON 列值的二进制表示形式中的释放空间 以下部分更新",
          "syntax": "JSON_STORAGE_FREE()",
          "originExample": "",
          "regexp": "\\bJSON_STORAGE_FREE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "用于存储 JSON 文档的二进制表示形式的空间",
          "syntax": "JSON_STORAGE_SIZE()",
          "originExample": "",
          "regexp": "\\bJSON_STORAGE_SIZE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "JSON 值的类型",
          "syntax": "JSON_TYPE()",
          "originExample": "",
          "regexp": "\\bJSON_TYPE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "取消对 JSON 值的引用",
          "syntax": "JSON_UNQUOTE()",
          "originExample": "",
          "regexp": "\\bJSON_UNQUOTE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "JSON值是否有效",
          "syntax": "JSON_VALID()",
          "originExample": "",
          "regexp": "\\bJSON_VALID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回总体标准差",
          "syntax": "STD()",
          "originExample": "",
          "regexp": "\\bSTD\\s*\\(",
          "recommend": "使用STDDEV代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回表列的默认值",
          "syntax": "DEFAULT()",
          "originExample": "",
          "regexp": "\\bDEFAULT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将超级聚合 ROLLUP 行与常规行区分开来",
          "syntax": "GROUPING()",
          "originExample": "",
          "regexp": "\\bGROUPING\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回 IP 地址的数值",
          "syntax": "INET_ATON()",
          "originExample": "",
          "regexp": "\\bINET_ATON\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IP 地址",
          "syntax": "INET_NTOA()",
          "originExample": "",
          "regexp": "\\bINET_NTOA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回 IPv6 地址的数值",
          "syntax": "INET6_ATON()",
          "originExample": "",
          "regexp": "\\bINET6_ATON\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IPv6 地址",
          "syntax": "INET6_NTOA()",
          "originExample": "",
          "regexp": "\\bINET6_NTOA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 兼容地址",
          "syntax": "IS_IPV4_COMPAT()",
          "originExample": "",
          "regexp": "\\bIS_IPV4_COMPAT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 映射地址",
          "syntax": "IS_IPV4_MAPPED()",
          "originExample": "",
          "regexp": "\\bIS_IPV4_MAPPED\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "参数是否为有效的 UUID",
          "syntax": "IS_UUID()",
          "originExample": "",
          "regexp": "\\bIS_UUID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "睡眠几秒钟",
          "syntax": "SLEEP()",
          "originExample": "",
          "regexp": "\\bSLEEP\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回整数值通用标识符",
          "syntax": "UUID_SHORT()",
          "originExample": "",
          "regexp": "\\bUUID_SHORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "originExample": "SELECT\n/*+ JOIN_PREFIX(t2, t5@subq2, t4@subq1)\n    JOIN_ORDER(t4@subq1, t3)\n    JOIN_SUFFIX(t1) */\nCOUNT(*) FROM t1 JOIN t2 JOIN t3\n           WHERE t1.f1 IN (SELECT /*+ QB_NAME(subq1) */ f1 FROM t4)\n             AND t2.f1 IN (SELECT /*+ QB_NAME(subq2) */ f1 FROM t5);",
          "regexp": "/\\*+[^/]*?\\b(JOIN_PREFIX|JOIN_SUFFIX|JOIN_ORDER)\\b[^/]*?\\*/",
          "recommend": "使用Leading(table table[ table...]) Ordered(table table[ table...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "JOIN_FIXED_ORDER/STRAIGHT_JOIN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bJOIN_FIXED_ORDER[^/]*?\\*/",
          "recommend": "使用Ordered Leading",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bNO_INDEX\\b[^/]*?\\*/",
          "recommend": "使用IndexScan(table[ index...]) index(table[ index...])或IndexOnlyScan(table[ index...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDER_INDEX, NO_ORDER_INDEX,FORCE INDEX",
          "originExample": "SELECT /*+ NO_ORDER_INDEX(t1 i_b,i_c) */ a,c\n    FROM t1\n    ORDER BY a;",
          "regexp": "/\\*+[^/]*?\\b(ORDER_INDEX|NO_ORDER_INDEX|FORCE\\s+INDEX)[^/]*?\\*/",
          "recommend": "使用IndexScan/IndexOnlyScan",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_MERGE",
          "originExample": "SELECT /*+ INDEX_MERGE(t1 f3, PRIMARY) */ f2 FROM t1\n  WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;",
          "regexp": "/\\*+[^/]*?\\bINDEX_MERGE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SKIP_SCAN, NO_SKIP_SCAN",
          "originExample": "SELECT /*+ SKIP_SCAN(t1 PRIMARY) */ f1, f2\n  FROM t1 WHERE f2 > 40;",
          "regexp": "/\\*+[^/]*?\\b(skip_scan|no_skip_scan)+\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "use_invisible_indexes=off",
          "originExample": "",
          "regexp": "\\buse_invisible_indexes\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bNO_BNL\\b[^/]*?\\*/",
          "recommend": "使用HashJoin(table table[ table...]) use_hash(table table[ table...])或NestLoop(table table[ table...]) use_nl(table table[ table...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BNL/NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bBNL\\b[^/]*?\\*/",
          "recommend": "使用HashJoin(table table[ table...]) use_hash(table table[ table...])或NestLoop(table table[ table...]) use_nl(table table[ table...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN, NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN(@subq1 FIRSTMATCH, LOOSESCAN) */ * FROM t2\n  WHERE t2.a IN (SELECT /*+ QB_NAME(subq1) */ a FROM t3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE, NO_MERGE",
          "originExample": "SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;",
          "regexp": "/\\*+[^/]*?\\b(MERGE|NO_MERGE)[^/]*?\\*/",
          "recommend": "使用MergeJoin(table[ table...]) use_merge(table[ table...])或NoMergeJoin(table[ table...]) no_use_merge(table[ table...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "DERIVED_CONDITION_PUSHDOWN, NO_DERIVED_CONDITION_PUSHDOWN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bDERIVED_CONDITION_PUSHDOWN[^/]*?\\*/\n/\\*+[^/]*?\\bNO_DERIVED_CONDITION_PUSHDOWN[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SET_VAR(sql_log_bin = off)",
          "originExample": "SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;",
          "regexp": "/\\*+[^/]*?\\bSET_VAR[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_CACHE/SQL_NO_CACHE",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_NO_CACHE|SQL_CACHE)\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_BIG_RESULT/SQL_SMALL_RESULT",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_BIG_RESULT|SQL_SMALL_RESULT)\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BKA, NO_BKA",
          "originExample": "SELECT /*+ NO_BKA(t1, t2) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\b(BKA|NO_BKA)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GROUP_INDEX, NO_GROUP_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bGROUP_INDEX[^/]*?\\*/\n/\\*+[^/]*?\\bNO_GROUP_INDEX[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MAX_EXECUTION_TIME",
          "originExample": "SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …",
          "regexp": "/\\*+[^/]*?\\bMAX_EXECUTION_TIME[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MRR, NO_MRR",
          "originExample": "SELECT /*+ MRR(t1) */ * FROM t1 WHERE f2 <= 3 AND 3 <= f3;",
          "regexp": "/\\*+[^/]*?\\bMRR[^/]*?\\*/\n/\\*+[^/]*?\\bNO_MRR[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_ICP",
          "originExample": "INSERT INTO t3(f1, f2, f3)\n  (SELECT /*+ NO_ICP(t2) */ t2.f1, t2.f2, t2.f3 FROM t1,t2\n   WHERE t1.f1=t2.f1 AND t2.f2 BETWEEN t1.f1\n   AND t1.f2 AND t2.f2 + 1 >= t1.f1 + 1);",
          "regexp": "/\\*+[^/]*?\\bNO_ICP[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_RANGE_OPTIMIZATION",
          "originExample": "SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1\n  FROM t3 WHERE f1 > 30 AND f1 < 33;",
          "regexp": "/\\*+[^/]*?\\bNO_RANGE_OPTIMIZATION[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESOURCE_GROUP",
          "originExample": "INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);",
          "regexp": "/\\*+[^/]*?\\bRESOURCE_GROUP[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SELECT USE INDEX",
          "originExample": "EXPLAIN SELECT * FROM marks\nUSE INDEX(ind_mark) \nWHERE mark between 50 and 100;",
          "regexp": "\\bUSE\\s+INDEX\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SELECT IGNORE INDEX",
          "originExample": "SELECT * FROM table1 IGNORE INDEX (col3_index) WHERE col1=1 AND col2=2 AND col3=3;",
          "regexp": "\\bIGNORE\\s+INDEX\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "SET [SESSION | @@SESSION. | @@]",
          "originExample": "",
          "regexp": "\\bSET\\s+(@@SESSION\\.|@@(?!GLOBAL)+)",
          "recommend": "不支持@@SESSION. 和 @@",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SET  {GLOBAL | @@GLOBAL.}",
          "originExample": "",
          "regexp": "\\bSET\\s+@@GLOBAL",
          "recommend": "不支持@@GLOBAL",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "查询中的变量如select t.*,MOD(@x :=  COALESCE(@x, 0) +1, 100) from table",
          "originExample": "",
          "regexp": "(@[0-9a-zA-Z]+\\s*:=)",
          "recommend": "不支持@变量",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "_rowid",
          "originExample": "",
          "regexp": "_rowid",
          "recommend": "LightDB 支持 ctid来唯一标识一行，类似于 oracle的 rowid",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看建表语句",
          "syntax": "show create table table_name",
          "originExample": "",
          "regexp": "\\bshow\\s+create\\s+table\\b",
          "recommend": "暂不支持，计划24年支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show variables like",
          "originExample": "show variables like '%%'",
          "regexp": "\\bshow\\s+variables\\s+like\\b",
          "recommend": "使用show %xxx%",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INGORE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "指定多个条件",
          "syntax": "DECLARE ... HANDLER",
          "originExample": "",
          "regexp": "\\bDECLARE\\s+(CONTINUE|EXIT|UNDO)\\s+HANDLER\\s+",
          "recommend": "不支持handler",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建一个预备语句",
          "syntax": "PREPARE ... FROM",
          "originExample": "",
          "regexp": "\\bPREPARE\\s+(\\w+|\\`\\w+\\`)\\s+FROM\\s+",
          "recommend": "使用PREPARE…AS",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "执行一个预备语句（带参数）",
          "syntax": "EXECUTE ... USING",
          "originExample": "",
          "regexp": "\\bEXECUTE\\s+(\\w+|\\`\\w+\\`)\\s+USING\\s+",
          "recommend": "使用EXECUTE name [ ( parameter [, ...] ) ]",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "释放创建的预备语句",
          "syntax": "DROP PREPARE",
          "originExample": "",
          "regexp": "\\bDROP\\s+PREPARE\\s+",
          "recommend": "使用DEALLOCATE PREPARE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT * FROM user u force index(idx_user_id_update_time) where u.id=100 order by u.update_time",
          "originExample": "select * from kids force index (idx);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "MySQL datetime 支持指定精度",
          "syntax": "datetime(6)",
          "originExample": "如： key1 datetime(6)",
          "regexp": "\\bdatetime\\s*\\(\\s*\\d\\s*\\)",
          "recommend": "LightDB 的 datetime\n不支持精度，可通过 timestamp(p) without time zone 替代",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "sql_mode",
          "originExample": "SET GLOBAL sql_mode = 'modes';\nSET SESSION sql_mode = 'modes';\nSET sql_mode='NO_UNSIGNED_SUBTRACTION';",
          "regexp": "\\bsql_mode\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "zerofill",
          "originExample": "create table t_d(key1 int(4) zerofill);",
          "regexp": "\\bzerofill\\b",
          "recommend": "LightDB 不支持对字段指定此属性来实现 zerofill功能，但可以通过使用 lpad函数来实\n现此功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "create event",
          "originExample": "CREATE EVENT IF NOT EXISTS e_test ON SCHEDULE EVERY 1 SECOND ON COMPLETION PRESERVE DO CALL e_test(); --------MySQL,隔一秒执行一次e_test",
          "regexp": "CREATE\\s+EVENT\\b",
          "recommend": "定时任务，可以定时执行数据库的命令，\nMySQL 通过 event实现， LightDB 通过 lt_cron 插件实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "bigint(4)",
          "originExample": "",
          "regexp": "\\bbigint\\s+\\(",
          "recommend": "bigint无需指定精度",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "DM8": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "insert into person partition (p_12) (name, age, job) values ('Cart', 8, 'No');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES on duplicate",
          "originExample": "INSERT INTO person partition (p_50) (name, age, job) \nVALUES ('John', 30, 'Engineer')\nON DUPLICATE KEY UPDATE age = VALUES(age), job = VALUES(job);",
          "regexp": "INSERT\\s+INTO\\s+[\\s\\S]+?\\s+ON\\s+DUPLICATE\\s+KEY\\s+(UPDATE|IGNORE)\\s+",
          "recommend": "使用merge into语法",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] SELECT ON DUPLICATE",
          "originExample": "INSERT INTO person PARTITION (p_20, p_50) (name, age)\nSELECT name, age\nFROM kids_1\nON DUPLICATE KEY UPDATE age = VALUES(age);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INTO student VALUES \n  ('Chun', 'SQL', 75), ('Chun', 'Tuning', 73)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "update person, pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "UPDATE\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(?:\\s+(AS\\s+)?\\w+)?(\\s*,\\s*(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(?:\\s+(AS\\s+)?\\w+)?)+\\s+SET",
          "recommend": "不支持同时更新多个表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "update person partition (p_50),pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "update t1 left join t2 on t1.id = t2.id set t1.name = t2.name;",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "REPLACE INTO VALUES",
          "originExample": "REPLACE INTO person (name, age, job) VALUES ('John', 25, 'Nurse');",
          "regexp": "\\bREPLACE\\s+INTO\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "REPLACE INTO t1 SELECT * FROM",
          "originExample": "replace into person select * from pp;",
          "regexp": "\\bREPLACE\\s+INTO\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "delete from person partition (p_50) where name = 'Wzy';",
          "regexp": "DELETE\\s+FROM\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+PARTITION\\s*\\(",
          "recommend": "直接通过分区表名+条件删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2\nWHERE a1.id=a2.id;",
          "originExample": "delete from p1, p2 using person as p1 inner join pp as p2 where p1.name = p2.name;",
          "regexp": "delete\\s+from\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(\\s*,\\s*(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?)*\\s+using\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?((inner|left|right|full)\\s+join\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?)+",
          "recommend": "使用子查询来删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "DELETE post FROM blog INNER JOIN post WHERE blog.id = post.blog_id;",
          "originExample": "delete pp from person inner join pp where person.name = pp.name;",
          "regexp": "delete\\s+(\\w+|\\`\\w+\\`)(\\s*,\\s*(\\w+|\\`\\w+\\`))*\\s+from\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?((inner|left|right|full)\\s+join\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?)+",
          "recommend": "使用子查询来删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tbl_name",
          "originExample": "",
          "regexp": "",
          "recommend": "dmfldr",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IMPORT TABLE FROM",
          "originExample": "",
          "regexp": "\\bIMPORT\\s+TABLE\\s+FROM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT DELAYED",
          "originExample": "",
          "regexp": "\\bINSERT\\s+DELAYED\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD XML",
          "originExample": "",
          "regexp": "\\bLOAD\\s+XML\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK INSTANCE FOR BACKUP",
          "originExample": "",
          "regexp": "\\bLOCK\\s+INSTANCE\\s+FOR\\s+BACKUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNLOCK INSTANCE",
          "originExample": "",
          "regexp": "\\bUNLOCK\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK TABLES / UNLOCK TABLES",
          "originExample": "",
          "regexp": "\\b(LOCK|UNLOCK)\\s+TABLES\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "XA",
          "originExample": "",
          "regexp": "\\bXA\\s+(START|BEGIN|END|PREPARE|COMMIT|ROLLBACK|RECOVER)\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [LIMIT {[offset,] row_count | row_count OFFSET offset}]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "SET MAX_EXECUTION_TIME = <timeout_in_milliseconds>;",
          "originExample": "SET MAX_EXECUTION_TIME = 30000;\nselect /*+ MAX_EXECUTION_TIME(30000) */ * from kids;",
          "regexp": "\\bSET\\s+MAX_EXECUTION_TIME\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update/LOCK IN SHARE MODE [NOWAIT]",
          "originExample": "select * from kids lock in share mode;",
          "regexp": "\\block\\s+in\\s+share\\s+mode",
          "recommend": "使用FOR READ ONLY",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= str_to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "select * from kids inner join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "select * from kids cross join kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name union select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join (select * from kids_2) as kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "select * from kids where age = (select max(age)/10 from kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT name,age FROM kids WHERE (name,age) IN (SELECT name,age FROM kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT name FROM kids WHERE EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT name FROM kids WHERE NOT EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "select AVG(kids_age) from (select SUM(age) as kids_age from kids group by name) as k;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "SELECT column1, column2, ...\nFROM table1\nWHERE condition1\nINTERSECT\nSELECT column1, column2, ...\nFROM table2\nWHERE condition2;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name intersect select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "select * from kids union select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "select * from kids union all select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "SELECT * FROM a\nEXCEPT\nSELECT * FROM b",
          "originExample": "select * from kids_2 except select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM kids\n   WHERE name='Jay'\n   UNION\n   SELECT c1.*\n   FROM kids AS c1, kids_2 AS c2\n   WHERE c1.name = c2.name OR c1.age = c2.age )\nSELECT * FROM ancestors;",
          "regexp": "\\bWITH\\s+RECURSIVE",
          "recommend": "WITH <递归with cte子句>{,<递归with cte子句>}<cte查询语句>;\n<递归with cte子句>::=<公用表表达式的名称> (<列名>{,<列名>})  AS (<定位点成员> UNION ALL <递归成员>)",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "SELECT *\nFROM (\n  WITH cte AS (\n    SELECT column1, column2, ...\n    FROM table1\n    WHERE condition\n  )\n  SELECT *\n  FROM cte\n) AS dt",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "select * from kids where kids.name IN(with c2 as (select * from kids_2) select name from c2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "with k1 as (select * from kids),\nk2 as (select * from kids_2)\nselect * from k2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT HIGH_PRIORITY * FROM TABLE1",
          "originExample": "select high_priority * from child_1;",
          "regexp": "\\bhigh_priority\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "into_option: {\n    INTO OUTFILE 'file_name'\n        [CHARACTER SET charset_name]\n        export_options\n  | INTO DUMPFILE 'file_name'\n  | INTO var_name [, var_name] ",
          "originExample": "",
          "regexp": "\\binto\\s+(outfile|dumpfile|@\\w+)+",
          "recommend": "导出使用dmfldr工具；变量需要先定义；",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STRAIGHT_JOIN",
          "originExample": "select * from t2 straight_join t1 on t2.a = t1.a;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "information_schema库",
          "syntax": "information_schema",
          "originExample": "SELECT\n  TABLE_SCHEMA,\n  TABLE_NAME,\n  ENGINE,\n  TABLE_ROWS,\n  AVG_ROW_LENGTH,\n  INDEX_LENGTH\nFROM\n  information_schema.TABLES;",
          "regexp": "\\binformation_schema\\.",
          "recommend": "不存在information_schema系统模式",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "create index idx on test(name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name SELECT",
          "originExample": "create table kids_1 select * from kids;",
          "regexp": "create\\s+(temporary\\s+)?table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+select",
          "recommend": "使用CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table LIKE old_table_name",
          "originExample": "create table kids_3 like kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE sales1 (\n      id INT AUTO_INCREMENT,\n      sale_date DATE,\n      product VARCHAR(50),\n      revenue DECIMAL(10, 2),\n      PRIMARY KEY (id, sale_date)\n) PARTITION BY RANGE COLUMNS(sale_date) (\n      PARTITION p2020 VALUES LESS THAN ('2021-01-01'),\n      PARTITION p2021 VALUES LESS THAN ('2022-01-01'),\n      PARTITION p2022 VALUES LESS THAN ('2023-01-01'),\n      PARTITION p2023 VALUES LESS THAN ('2024-01-01'),\n      PARTITION p2024 VALUES LESS THAN ('2025-01-01')\n);",
          "regexp": "\\bPARTITION\\s+BY\\s+RANGE\\s+COLUMNS",
          "recommend": "DM8不支持使用RANGE COLUMNS分区方式",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD COLUMN col_name column_definition",
          "originExample": "ALTER TABLE person2 ADD COLUMN birth varchar(50);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "alter table children add constraint id_pk primary key(id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": " alter table students drop constraint yy;",
          "originExample": "alter table children drop constraint id_pk;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "alter table person truncate partition p_12;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "alter table person add partition (partition p_110 values less than (110));",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+add\\s+partition\\s*\\(\\s*partition",
          "recommend": "DM8语法结构稍有差别：ALTER TABLE t ADD PARTITION xxx VALUES …",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t REMOVE PARTITIONING",
          "originExample": "alter table t remove partitioning;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+remove\\s+partitioning",
          "recommend": "不支持 REMOVE PARTITIONING。需要创建新表并进行数据迁移",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;",
          "originExample": "alter table person modify sex int;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME TABLE a TO b\nALTER TABLE t RENAME TO t1",
          "originExample": "rename table test to t;",
          "regexp": "rename\\s+(table\\s+)?(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+to\\s+",
          "recommend": "使用ALTER TABLE … RENAME TO …",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX index_name ON tbl_name\nALTER TALBE DROP INDEX",
          "originExample": "drop index idx on test;",
          "regexp": "(alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+)?drop\\s+index\\s+",
          "recommend": "DROP INDEX [IF EXISTS] [<模式名>.]<索引名>;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "alter table person drop partition p_110;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER EVENT",
          "originExample": "",
          "regexp": "\\bALTER\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER INSTANCE",
          "originExample": "",
          "regexp": "\\bALTER\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bALTER\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SERVER",
          "originExample": "",
          "regexp": "\\bALTER\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE EVENT",
          "originExample": "",
          "regexp": "\\bCREATE\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "使用DBMS_SCHEDULER 系统包",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bCREATE\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SERVER",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE TRIGGER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP EVENT",
          "originExample": "",
          "regexp": "\\bDROP\\s+EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bDROP\\s+LOGFILE\\s+GROUP",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SERVER",
          "originExample": "",
          "regexp": "\\bDROP\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bDROP\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP TRIGGER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS()",
          "originExample": "select abs(-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BIT_AND",
          "originExample": "SELECT BIT_AND(x)\nFROM (\n    SELECT 4 x\n    UNION\n    SELECT 5 x\n    UNION\n    SELECT 6 x\n) t;",
          "regexp": "\\bBIT_AND\\s*\\(",
          "recommend": "BITAND()：求两个数值型数值按位进行 AND 运算的结果",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL()",
          "originExample": "SELECT CEIL(2.132);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP()",
          "originExample": "SELECT EXP(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT FLOOR(1.23), FLOOR(-1.23);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(234, 10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "SELECT POWER (2,-2);\nSELECT POW(2,-2);",
          "regexp": "\\bPOW\\s*\\(",
          "recommend": "使用POWER()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "RAND()",
          "originExample": "SELECT RAND();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND()",
          "originExample": "SELECT ROUND(1.298, 0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "SELECT SIGN(-32);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "SELECT SQRT(4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNCATE()",
          "originExample": "SELECT TRUNCATE(1.223,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null or\nx = ''",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHAR()",
          "originExample": "SELECT CHAR(123);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT()",
          "originExample": "SELECT CONCAT('123', '456');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT lower('AAA');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "SELECT LPAD('hi',4,'??');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "SELECT LTRIM('  barbar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "SELECT REPLACE('JACK and JUE','J','BL');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "SELECT RPAD('hi',5,'?');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('barbar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('Sakila' FROM -4 FOR 2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "SELECT TRIM('  bar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "SELECT UPPER('Hej');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE",
          "originExample": "SELECT REVERSE('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII()",
          "originExample": "SELECT ASCII('dx');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR()",
          "originExample": "SELECT INSTR('foobarbar', 'bar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CHAR_LENGTH()",
          "originExample": "SELECT CHAR_LENGTH('dolphin');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR()",
          "originExample": "SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_ADD('2008-01-02', INTERVAL 1 MONTH)\nDATE_SUB",
          "originExample": "SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);",
          "regexp": "\\b(DATE_ADD|DATE_SUB)\\s*\\([^)]*\\,\\s*INTERVAL\\s*\\d+\\s*",
          "recommend": "DM8中，入参中INTERVAL后数字使用字符串形式",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURDATE()/CURRENT_DATE()",
          "originExample": "SELECT CURRENT_DATE();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP()",
          "originExample": "SELECT CURRENT_TIMESTAMP();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURTIME()/CURRENT_TIME()",
          "originExample": "SELECT CURRENT_TIME();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT()",
          "originExample": "SELECT EXTRACT(YEAR FROM '2019-07-02');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY('2003-02-05');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "PERIOD_DIFF",
          "originExample": "SELECT PERIOD_DIFF(200802,200703);",
          "regexp": "\\bperiod_diff\\b",
          "recommend": "使用MONTHS_BETWEEN",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE(DATE_FORMAT(date,format))",
          "originExample": "SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');",
          "regexp": "\\bSTR_TO_DATE\\s*\\(",
          "recommend": "使用TO_DATE",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NOW()\nSYSDATE()",
          "originExample": "SELECT SYSDATE(), NOW();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST('2020-12-12 12:12:12' AS DATETIME(秒后小数点位数))",
          "originExample": "SELECT CAST('2017-08-29 12:10:08.2235' AS DATETIME);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(34.0,3.0,5.0,767.0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "conv('101',2,10)",
          "originExample": "SELECT CONV('a',16,2);",
          "regexp": "\\bCONV\\s*\\(",
          "recommend": "不支持，需要自定义转换函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST()",
          "originExample": "SELECT CAST('100.5678' AS SIGNED);",
          "regexp": "\\bCAST\\s*\\([^)]*\\s*AS\\s+(SIGNED|UNSIGNED|YEAR)",
          "recommend": "目标数据类型的关键字不兼容，请查看DM8文档",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SEC_TO_TIME()",
          "originExample": "SELECT SEC_TO_TIME(2378);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_FORMAT",
          "originExample": "SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %W');",
          "regexp": "\\bDATE_FORMAT\\s*\\([^)]*(%v|%x)+[^)]*\\)",
          "recommend": "不支持以下模板：%V %v %X %x",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE",
          "originExample": "",
          "regexp": "\\bSTR_TO_DATE\\s*\\(",
          "recommend": "使用TO_DATE",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IF",
          "originExample": "SELECT IF(1>2,2,3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "SELECT COALESCE(NULL,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(1,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IFNULL",
          "originExample": "SELECT IFNULL(NULL,10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UUID()",
          "originExample": "SELECT UUID();",
          "regexp": "\\bUUID\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_USER()\nUSER() ",
          "originExample": "SELECT USER();\nSELECT CURRENT_USER();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "SELECT AVG(age) FROM PERSON;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM PERSON; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "CREATE TABLE scores (\n    name VARCHAR(20) PRIMARY KEY,\n    score INT NOT NULL\n);\n\nINSERT INTO\n scores(name, score)\nVALUES\n ('Smith',81),\n ('Jones',55),\n ('Williams',55),\n ('Taylor',62),\n ('Brown',62),\n ('Davies',84),\n ('Evans',87),\n ('Wilson',72),\n ('Thomas',72),\n ('Johnson',100); \n\nSELECT\n name,\n    score,\n    ROW_NUMBER() OVER (ORDER BY score) row_num,\n    CUME_DIST() OVER (ORDER BY score) cume_dist_val\nFROM\n scores; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "CREATE TABLE rankDemo (\n    val INT\n);\n \nINSERT INTO rankDemo(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    DENSE_RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "select MAX(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "select MIN(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "CREATE TABLE sales (\n  id INT AUTO_INCREMENT PRIMARY KEY,\n  product VARCHAR(50),\n  revenue DECIMAL(10, 2)\n);\n\nINSERT INTO sales (product, revenue)\nVALUES\n  ('Product A', 1000.00),\n  ('Product B', 1500.00),\n  ('Product C', 2000.00),\n  ('Product D', 2500.00),\n  ('Product E', 3000.00);\n\nSELECT\n  product,\n  revenue,\n  PERCENT_RANK() OVER (ORDER BY revenue)\nFROM sales;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "CREATE TABLE rankDemo2 (\n    val INT\n);\n \nINSERT INTO rankDemo2(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo2; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": " SELECT STDDEV(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": " SELECT STDDEV_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": " SELECT STDDEV_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT sum(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE()",
          "originExample": "SELECT\n*\nFROM\nJSON_TABLE(\n '[ {\"c1\": null} ]',\n'$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON\nERROR )\n) AS jt;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE()",
          "originExample": "SELECT JSON_VALUE('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY()",
          "originExample": "SELECT JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME());",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG()",
          "originExample": "select json_arrayagg(name) from person;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT()",
          "originExample": "SELECT JSON_OBJECT('id', 87, 'name', 'carrot');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG()",
          "originExample": "CREATE TABLE t_json(c VARCHAR(10), i INT);\n\nINSERT INTO t_json VALUES ('key', 3), ('key', 4), ('key', 5);\n\nSELECT JSON_OBJECTAGG(c, i) FROM t_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GROUP_CONCAT()",
          "originExample": "select group_concat(age) from person;",
          "regexp": "\\bGROUP_CONCAT\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE  ntileDemo (\n    val INT NOT NULL\n);\n \nINSERT INTO ntileDemo(val) \nVALUES(1),(2),(3),(4),(5),(6),(7),(8),(9);\n\nSELECT \n    val, \n    NTILE(4) OVER (\n        ORDER BY val\n    ) group_no\nFROM \n    ntileDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "CREATE TABLE basic_pays(\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    salary INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n \nINSERT INTO \n basic_pays(employee_name, \n    department, \n    salary)\nVALUES\n ('Diane Murphy','Accounting',8435),\n ('Mary Patterson','Accounting',9998),\n ('Jeff Firrelli','Accounting',8992),\n ('William Patterson','Accounting',8870),\n ('Gerard Bondur','Accounting',11472),\n ('Anthony Bow','Accounting',6627),\n ('Leslie Jennings','IT',8113),\n ('Leslie Thompson','IT',5186),\n ('Julie Firrelli','Sales',9181),\n ('Steve Patterson','Sales',9441),\n ('Foon Yue Tseng','Sales',6660),\n ('George Vanauf','Sales',10563),\n ('Loui Bondur','SCM',10449),\n ('Gerard Hernandez','SCM',6949),\n ('Pamela Castillo','SCM',11303),\n ('Larry Bott','SCM',11798),\n ('Barry Jones','SCM',10586); \n\nSELECT\n    employee_name,\n    salary,\n    NTH_VALUE(employee_name, 2) OVER  (\n        ORDER BY salary DESC\n    ) second_highest_salary\nFROM\n    basic_pays; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE()",
          "originExample": "CREATE TABLE overtime (\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    hours INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n\nINSERT INTO overtime(employee_name, department, hours)\nVALUES('Diane Murphy','Accounting',37),\n('Mary Patterson','Accounting',74),\n('Jeff Firrelli','Accounting',40),\n('William Patterson','Finance',58),\n('Gerard Bondur','Finance',47),\n('Anthony Bow','Finance',66),\n('Leslie Jennings','IT',90),\n('Leslie Thompson','IT',88),\n('Julie Firrelli','Sales',81),\n('Steve Patterson','Sales',29),\n('Foon Yue Tseng','Sales',65),\n('George Vanauf','Marketing',89),\n('Loui Bondur','Marketing',49),\n('Gerard Hernandez','Marketing',66),\n('Pamela Castillo','SCM',96),\n('Larry Bott','SCM',100),\n('Barry Jones','SCM',65); \n\nSELECT\n    employee_name,\n    hours,\n    FIRST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "SELECT\n    employee_name,\n    LAG(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE()",
          "originExample": "SELECT\n    employee_name,\n    hours,\n    LAST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT\n    employee_name,\n    LEAD(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "find_in_set",
          "originExample": "SELECT FIND_IN_SET('b','a,b,c,d');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "crc32",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "仅日期部分相减",
          "syntax": "datediff",
          "originExample": "SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');",
          "regexp": "\\bDATEDIFF\\s*\\(",
          "recommend": "DM8中入参有所不同",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "\\bTO_BASE64\\s*\\(",
          "recommend": "使用utl_encode.base64_ENCODE",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FROM_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "\\bFROM_BASE64\\s*\\(",
          "recommend": "utl_encode.base64_DECODE",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "指定位置替换字符串,replace模式",
          "syntax": "insert",
          "originExample": "SELECT INSERT('Quadratic', 3, 4, 'What');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "是否IPV4",
          "syntax": "IS_IPV4",
          "originExample": "",
          "regexp": "\\bIS_IPV4\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_IPV6",
          "originExample": "",
          "regexp": "\\bIS_IPV6\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "md5",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回从过去的日期开始的月份",
          "syntax": "month",
          "originExample": "SELECT MONTH('2008-02-03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回月份的名称",
          "syntax": "MONTHNAME",
          "originExample": "SELECT MONTHNAME('2008-02-03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_INSERT_ID()",
          "originExample": "SELECT LAST_INSERT_ID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONVERT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AES_DECRYPT()/AES_ENCRYPT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNHEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "HEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD_FILE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MATCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SOUNDEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADDTIME()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYNAME()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFMONTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFYEAR()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ExtractValue()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UpdateXML()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANDOM_BYTES()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA1()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA2()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GET_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_FREE_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_USED_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_ALL_LOCKS()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MASTER_POS_WAIT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NAME_CONST()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIT_XOR()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期或日期时间表达式",
          "syntax": "TIMESTAMP()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "整除 / 求余",
          "syntax": "DIV / MOD",
          "originExample": "select 9 div 2;\nselect 9 mod 2;",
          "regexp": "\\s+DIV\\s+",
          "recommend": "可使用 / 配合floor函数；",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "安全等于运算符\n严格比较两个NULL值是否相等。",
          "syntax": "<=>",
          "originExample": "select null <=> null;",
          "regexp": "\\s*<=>\\s*",
          "recommend": "不支持<=>运算符",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "异或",
          "syntax": "xor",
          "originExample": "select 1 xor 0;",
          "regexp": "\\s+XOR\\s+",
          "recommend": "可尝试用位异或^操作符或者case when代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "与",
          "syntax": "&&",
          "originExample": "select 1 && 1;",
          "regexp": "\\s+\\&\\&\\s+",
          "recommend": "不支持&&，尝试使用AND代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "判断一个值是否存在于集合（数组）中的操作符",
          "syntax": "MEMBER OF()",
          "originExample": "SELECT 17 MEMBER OF('[23, \"abc\", 17, \"ab\", 10]');",
          "regexp": "\\bMEMBER\\s+OF\\s*\\(",
          "recommend": "不支持member of()，请尝试使用LIKE或正则代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回两个参数的弧切线",
          "syntax": "ATAN(x,y)",
          "originExample": "SELECT ATAN(-2,2);",
          "regexp": "\\bATAN\\s*\\(\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*,\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*\\)",
          "recommend": "使用ATAN2()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将时间值（间隔）添加到日期值",
          "syntax": "ADDDATE()",
          "originExample": "SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "\\bADDDATE\\s*\\(",
          "recommend": "使用DATE_ADD函数，注意参数内日期数需要是字符串",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从一个时区转换到另一个时区",
          "syntax": "CONVERT_TZ()",
          "originExample": "SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');",
          "regexp": "\\bCONVERT_TZ\\s*\\(",
          "recommend": "不支持该函数，可尝试使用AT TIME ZONE转换时区",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "天数值转换为日期",
          "syntax": "FROM_DAYS()",
          "originExample": "SELECT FROM_DAYS(730669);",
          "regexp": "\\bFROM_DAYS\\s*\\(",
          "recommend": "不支持该函数，可尝试TO_DATE('0001-01-01', 'YYYY-MM-DD') + 737850的方式",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期格式字符串",
          "syntax": "GET_FORMAT()",
          "originExample": "SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));",
          "regexp": "\\bGET_FORMAT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取小时",
          "syntax": "HOUR()",
          "originExample": "SELECT HOUR('10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "本地时间，同NOW()",
          "syntax": "LOCALTIME()/LOCALTIMESTAMP()",
          "originExample": "SELECT LOCALTIME();\nSELECT LOCALTIMESTAMP();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从年份和年份中的某一天创建日期",
          "syntax": "MAKEDATE()",
          "originExample": "SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);",
          "regexp": "\\bMAKEDATE\\s*\\(",
          "recommend": "可以使用日期函数+运算实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从小时、分钟、秒创建时间",
          "syntax": "MAKETIME()",
          "originExample": "SELECT MAKETIME(12,15,30);",
          "regexp": "\\bMAKETIME\\s*\\(",
          "recommend": "可以直接使用时间字面量，或者TO_DATE函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数返回微秒",
          "syntax": "MICROSECOND()",
          "originExample": "SELECT MICROSECOND('12:00:00.123456');",
          "regexp": "\\bMICROSECOND\\s*\\(",
          "recommend": "可以使用日期和时间函数以及算术运算来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数中返回分钟",
          "syntax": "MINUTE()",
          "originExample": "SELECT MINUTE('2008-02-03 10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "给期间添加特定的月数",
          "syntax": "PERIOD_ADD()",
          "originExample": "SELECT PERIOD_ADD(200801,2);",
          "regexp": "\\bPERIOD_ADD\\s*\\(",
          "recommend": "使用日期和时间函数以及算术运算来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从日期参数返回季度",
          "syntax": "QUARTER()",
          "originExample": "SELECT QUARTER('2008-04-01');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回秒数",
          "syntax": "SECOND()",
          "originExample": "SELECT SECOND('10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "使用三个参数调用时 DATE_SUB（） 的同义词",
          "syntax": "SUBDATE()",
          "originExample": "SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "\\bSUBDATE\\s*\\(",
          "recommend": "可以使用日期和时间函数以及算术运算来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "减去时间",
          "syntax": "SUBTIME()",
          "originExample": "SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');",
          "regexp": "\\bSUBTIME\\s*\\(",
          "recommend": "可以使用日期和时间函数以及算术运算来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取传递的表达式的时间部分",
          "syntax": "TIME()",
          "originExample": "SELECT TIME('2003-12-31 01:02:03');",
          "regexp": "\\bTIME\\s*\\(",
          "recommend": "使用CAST函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "格式化为时间",
          "syntax": "TIME_FORMAT()",
          "originExample": "SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');",
          "regexp": "\\bTIME_FORMAT\\s*\\(",
          "recommend": "可尝试使用TO_CHAR函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向日期时间表达式添加间隔",
          "syntax": "TIMESTAMPADD()",
          "originExample": "SELECT TIMESTAMPADD(MINUTE, 1, '2003-01-02');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期",
          "syntax": "UTC_DATE()",
          "originExample": "SELECT UTC_DATE(), UTC_DATE() + 0;",
          "regexp": "\\bUTC_DATE\\b",
          "recommend": "配合时区转换函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 时间",
          "syntax": "UTC_TIME()",
          "originExample": "SELECT UTC_TIME, UTC_TIME() + 0;",
          "regexp": "\\bUTC_TIME\\b",
          "recommend": "使用日期和时间函数以及时区设置来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期和时间",
          "syntax": "UTC_TIMESTAMP()",
          "originExample": "SELECT UTC_TIMESTAMP, UTC_TIMESTAMP() + 0;",
          "regexp": "\\bUTC_TIMESTAMP\\b",
          "recommend": "使用日期和时间函数以及时区设置来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回周数",
          "syntax": "WEEK()",
          "originExample": "SELECT WEEK('2008-12-31',1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回工作日索引",
          "syntax": "WEEKDAY()",
          "originExample": "SELECT WEEKDAY('2008-02-03 22:23:00');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回年份和星期",
          "syntax": "YEARWEEK()",
          "originExample": "SELECT YEARWEEK('1987-01-01');",
          "regexp": "\\bYEARWEEK\\s*\\(",
          "recommend": "可以使用日期和时间函数以及算术运算来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的二进制表示形式",
          "syntax": "BIN()",
          "originExample": "SELECT BIN(12);",
          "regexp": "\\bBIN\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，以便对于值位中设置的每个位，您 获取一个 ON 字符串，对于每个未设置的位，您都会得到一个 OFF 字符串",
          "syntax": "EXPORT_SET()",
          "originExample": "SELECT EXPORT_SET(5,'Y','N',',',4);",
          "regexp": "\\bEXPORT_SET\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回格式化为指定小数位数的数字",
          "syntax": "FORMAT()",
          "originExample": "SELECT FORMAT(12332.123456, 4);",
          "regexp": "\\bFORMAT\\s*\\(",
          "recommend": "可尝试使用TO_CHAR函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一组逗号分隔的字符串，这些字符串具有 位中的相应位集",
          "syntax": "MAKE_SET()",
          "originExample": "SELECT MAKE_SET(1,'a','b','c');",
          "regexp": "\\bMAKE_SET\\s*\\(",
          "recommend": "使用位操作函数和条件表达式来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "REGEXP 的否定",
          "syntax": "NOT REGEXP",
          "originExample": "SELECT 'a' NOT REGEXP '^[a-d]';",
          "regexp": "\\bNOT\\s+REGEXP\\b",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP",
          "originExample": "SELECT 'a' REGEXP '^[a-d]';",
          "regexp": "\\s+REGEXP\\s+",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "RLIKE",
          "originExample": "SELECT 'a' RLIKE '^[a-d]';",
          "regexp": "\\s+RLIKE\\s+",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的八进制表示形式",
          "syntax": "OCT()",
          "originExample": "SELECT OCT(12);",
          "regexp": "\\bOCT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数最左边字符的字符代码",
          "syntax": "ORD()",
          "originExample": "SELECT ORD('2');",
          "regexp": "\\bORD\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转义参数以在 SQL 语句中使用",
          "syntax": "QUOTE()",
          "originExample": "SELECT QUOTE('Don\\'t!');",
          "regexp": "\\bQUOTE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP_LIKE()",
          "originExample": "SELECT REGEXP_LIKE('CamelCase', 'CAMELCASE');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较soundex()值",
          "syntax": "SOUNDS LIKE",
          "originExample": "expr1 SOUNDS LIKE expr2\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).",
          "regexp": "\\bSOUNDS\\s+LIKE\\b",
          "recommend": "不支持sounds like",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从指定数量的 分隔符的出现次数",
          "syntax": "SUBSTRING_INDEX()",
          "originExample": "SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串的权重字符串",
          "syntax": "WEIGHT_STRING()",
          "originExample": "SELECT WEIGHT_STRING('ab'); ",
          "regexp": "\\bWEIGHT_STRING\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回设置的位数",
          "syntax": "BIT_COUNT()",
          "originExample": "SELECT BIT_COUNT(64);",
          "regexp": "\\bBIT_COUNT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算语句摘要哈希值",
          "syntax": "STATEMENT_DIGEST()",
          "originExample": "SELECT STATEMENT_DIGEST('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算规范化语句摘要",
          "syntax": "STATEMENT_DIGEST_TEXT()",
          "originExample": "SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST_TEXT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回压缩前字符串的长度",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "确定密码的强度",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "SELECT VALIDATE_PASSWORD_STRENGTH('weak');",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "重复执行表达式",
          "syntax": "BENCHMARK()",
          "originExample": "SELECT BENCHMARK(1000000,MD5('goodbye'));",
          "regexp": "\\bBENCHMARK\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的字符集",
          "syntax": "CHARSET()",
          "originExample": "SELECT CHARSET('abc');",
          "regexp": "\\bCHARSET\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则强制值",
          "syntax": "COERCIBILITY()",
          "originExample": "SELECT COERCIBILITY('abc');",
          "regexp": "\\bCOERCIBILITY\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则",
          "syntax": "COLLATION()",
          "originExample": "SELECT COLLATION('abc');",
          "regexp": "\\bCOLLATION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回连接的连接 ID（线程 ID）",
          "syntax": "CONNECTION_ID()",
          "originExample": "SELECT CONNECTION_ID();",
          "regexp": "\\bCONNECTION_ID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前活动角色",
          "syntax": "CURRENT_ROLE()",
          "originExample": "SELECT CURRENT_ROLE();",
          "regexp": "\\bCURRENT_ROLE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FOUND_ROWS()",
          "originExample": "SELECT FOUND_ROWS();",
          "regexp": "\\bFOUND_ROWS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "ICU 库版本",
          "syntax": "ICU_VERSION()",
          "originExample": "select ICU_VERSION();",
          "regexp": "\\bICU_VERSION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表示内存角色子图的 GraphML 文档",
          "syntax": "ROLES_GRAPHML()",
          "originExample": "SELECT ROLES_GRAPHML();",
          "regexp": "\\bROLES_GRAPHML\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "更新的行数",
          "syntax": "ROW_COUNT()",
          "originExample": "SELECT ROW_COUNT();",
          "regexp": "\\bROW_COUNT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回默认（当前）数据库名称",
          "syntax": "SCHEMA()",
          "originExample": "SELECT SCHEMA();",
          "regexp": "\\bSCHEMA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "客户端提供的用户名和主机名",
          "syntax": "SYSTEM_USER()",
          "originExample": "SELECT SYSTEM_USER();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeomCollection()",
          "originExample": "SELECT GeomCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeometryCollection()",
          "originExample": "SELECT GeometryCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 Point 值构造 LineString",
          "syntax": "LineString()",
          "originExample": "SELECT LineString(Point(2, 2), Point(3, 3));",
          "regexp": "\\bLineString\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何图形的 MBR 是否包含另一个几何图形的 MBR",
          "syntax": "MBRContains()",
          "originExample": "SELECT MBRContains(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRContains\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否被另一个MBR覆盖",
          "syntax": "MBRCoveredBy()",
          "originExample": "SELECT MBRCoveredby(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCoveredBy\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否覆盖另一个MBR",
          "syntax": "MBRCovers()",
          "originExample": "SELECT MBRCovers(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCovers\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否不相交",
          "syntax": "MBRDisjoint()",
          "originExample": "SELECT MBRDisjoint(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRDisjoint\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否相等",
          "syntax": "MBREquals()",
          "originExample": "SELECT MBREquals(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBREquals\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的 MBR 是否相交",
          "syntax": "MBRIntersects()",
          "originExample": "SELECT MBRIntersects(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRIntersects\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否重叠",
          "syntax": "MBROverlaps()",
          "originExample": "SELECT MBROverlaps(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBROverlaps\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两种几何形状的MBR是否接触",
          "syntax": "MBRTouches()",
          "originExample": "SELECT MBRTouches(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRTouches\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何形状的 MBR 是否在另一个几何形状的 MBR 范围内",
          "syntax": "MBRWithin()",
          "originExample": "SELECT MBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRWithin\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 LineString 值构造 MultiLineString",
          "syntax": "MultiLineString()",
          "originExample": "SELECT MultiLineString(\n    LineString(Point(2, 2), Point(3, 3)),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bMultiLineString\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从点值构造 MultiPoint",
          "syntax": "MultiPoint()",
          "originExample": "SELECT MultiPoint(\n    Point(1, 1),\n    Point(2, 2)\n);",
          "regexp": "\\bMultiPoint\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从多边形值构造 MultiPolygon",
          "syntax": "MultiPolygon()",
          "originExample": "SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';\nSELECT ST_Area(ST_GeomFromText(@mpoly));",
          "regexp": "\\bMultiPolygon\\s*\\(",
          "recommend": "使用DMGEO包",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将数据追加到 JSON 文档",
          "syntax": "JSON_ARRAY_APPEND()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入到 JSON 数组中",
          "syntax": "JSON_ARRAY_INSERT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档的最大深度",
          "syntax": "JSON_DEPTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中的键数组",
          "syntax": "JSON_KEYS()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON文档中的元素数",
          "syntax": "JSON_LENGTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE()",
          "originExample": "",
          "regexp": "\\bJSON_MERGE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，替换重复键的值",
          "syntax": "JSON_MERGE_PATCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE_PRESERVE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较两个 JSON 文档，如果这些文档有任何 TRUE（1），则返回 TRUE （0） 键值对或数组元素相同，否则为 FALSE （<>）",
          "syntax": "JSON_OVERLAPS()",
          "originExample": "",
          "regexp": "\\bJSON_OVERLAPS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "引用 JSON 文档",
          "syntax": "JSON_QUOTE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;如果出现以下情况，则返回 TRUE/1 document 根据架构进行验证，如果没有，则为 FALSE/0",
          "syntax": "JSON_SCHEMA_VALID()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;以 JSON 格式返回报告 验证结果的格式，包括成功或失败，以及 失败原因",
          "syntax": "JSON_SCHEMA_VALIDATION_REPORT()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALIDATION_REPORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中值的路径",
          "syntax": "JSON_SEARCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 列值的二进制表示形式中的释放空间 以下部分更新",
          "syntax": "JSON_STORAGE_FREE()",
          "originExample": "",
          "regexp": "\\bJSON_STORAGE_FREE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "用于存储 JSON 文档的二进制表示形式的空间",
          "syntax": "JSON_STORAGE_SIZE()",
          "originExample": "",
          "regexp": "\\bJSON_STORAGE_SIZE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 值的类型",
          "syntax": "JSON_TYPE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "取消对 JSON 值的引用",
          "syntax": "JSON_UNQUOTE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON值是否有效",
          "syntax": "JSON_VALID()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回总体标准差",
          "syntax": "STD()",
          "originExample": "",
          "regexp": "\\bSTD\\s*\\(",
          "recommend": "使用STDDEV代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表列的默认值",
          "syntax": "DEFAULT()",
          "originExample": "",
          "regexp": "\\bDEFAULT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将超级聚合 ROLLUP 行与常规行区分开来",
          "syntax": "GROUPING()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IP 地址的数值",
          "syntax": "INET_ATON()",
          "originExample": "",
          "regexp": "\\bINET_ATON\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IP 地址",
          "syntax": "INET_NTOA()",
          "originExample": "",
          "regexp": "\\bINET_NTOA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IPv6 地址的数值",
          "syntax": "INET6_ATON()",
          "originExample": "",
          "regexp": "\\bINET6_ATON\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IPv6 地址",
          "syntax": "INET6_NTOA()",
          "originExample": "",
          "regexp": "\\bINET6_NTOA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 兼容地址",
          "syntax": "IS_IPV4_COMPAT()",
          "originExample": "",
          "regexp": "\\bIS_IPV4_COMPAT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 映射地址",
          "syntax": "IS_IPV4_MAPPED()",
          "originExample": "",
          "regexp": "\\bIS_IPV4_MAPPED\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为有效的 UUID",
          "syntax": "IS_UUID()",
          "originExample": "",
          "regexp": "\\bIS_UUID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "睡眠几秒钟",
          "syntax": "SLEEP()",
          "originExample": "",
          "regexp": "\\bSLEEP\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回整数值通用标识符",
          "syntax": "UUID_SHORT()",
          "originExample": "",
          "regexp": "\\bUUID_SHORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "originExample": "SELECT\n/*+ JOIN_PREFIX(t2, t5@subq2, t4@subq1)\n    JOIN_ORDER(t4@subq1, t3)\n    JOIN_SUFFIX(t1) */\nCOUNT(*) FROM t1 JOIN t2 JOIN t3\n           WHERE t1.f1 IN (SELECT /*+ QB_NAME(subq1) */ f1 FROM t4)\n             AND t2.f1 IN (SELECT /*+ QB_NAME(subq2) */ f1 FROM t5);",
          "regexp": "/\\*+[^/]*?\\b(JOIN_PREFIX|JOIN_SUFFIX|JOIN_ORDER)\\b[^/]*?\\*/",
          "recommend": "使用/*+ ORDER (T1, T2 , T3, … tn ) */",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "JOIN_FIXED_ORDER/STRAIGHT_JOIN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bJOIN_FIXED_ORDER[^/]*?\\*/",
          "recommend": "使用/*+ ORDER (T1, T2 , T3, … tn ) */",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_INDEX",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDER_INDEX, NO_ORDER_INDEX,FORCE INDEX",
          "originExample": "SELECT /*+ NO_ORDER_INDEX(t1 i_b,i_c) */ a,c\n    FROM t1\n    ORDER BY a;",
          "regexp": "/\\*+[^/]*?\\b(ORDER_INDEX|NO_ORDER_INDEX|FORCE\\s+INDEX)[^/]*?\\*/",
          "recommend": "使用INDEX/NO_INDEX",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_MERGE",
          "originExample": "SELECT /*+ INDEX_MERGE(t1 f3, PRIMARY) */ f2 FROM t1\n  WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;",
          "regexp": "/\\*+[^/]*?\\bINDEX_MERGE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SKIP_SCAN, NO_SKIP_SCAN",
          "originExample": "SELECT /*+ SKIP_SCAN(t1 PRIMARY) */ f1, f2\n  FROM t1 WHERE f2 > 40;",
          "regexp": "/\\*+[^/]*?\\bskip_scan[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "use_invisible_indexes=off",
          "originExample": "",
          "regexp": "\\buse_invisible_indexes\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bNO_BNL[^/]*?\\*/",
          "recommend": "使用USE_NL/NO_USE_NL或USE_HASH/NO_USE_HASH",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BNL/NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bBNL[^/]*?\\*/",
          "recommend": "使用USE_NL/NO_USE_NL或USE_HASH/NO_USE_HASH",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN, NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN(@subq1 FIRSTMATCH, LOOSESCAN) */ * FROM t2\n  WHERE t2.a IN (SELECT /*+ QB_NAME(subq1) */ a FROM t3);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN[^/]*?\\*/\n/\\*+[^/]*?\\bNO_SEMIJOIN[^/]*?\\*/",
          "recommend": "使用SEMI_GEN_CROSS/NO_SEMI_GEN_CROSS",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE, NO_MERGE",
          "originExample": "SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;",
          "regexp": "/\\*+[^/]*?\\b(MERGE|NO_MERGE)[^/]*?\\*/",
          "recommend": "使用USE_MERGE/NO_USE_MERGE",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "DERIVED_CONDITION_PUSHDOWN, NO_DERIVED_CONDITION_PUSHDOWN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bDERIVED_CONDITION_PUSHDOWN[^/]*?\\*/\n/\\*+[^/]*?\\bNO_DERIVED_CONDITION_PUSHDOWN[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SET_VAR(sql_log_bin = off)",
          "originExample": "SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;",
          "regexp": "/\\*+[^/]*?\\bSET_VAR[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_CACHE/SQL_NO_CACHE",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_NO_CACHE|SQL_CACHE)\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_BIG_RESULT/SQL_SMALL_RESULT",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_BIG_RESULT|SQL_SMALL_RESULT)\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BKA, NO_BKA",
          "originExample": "SELECT /*+ NO_BKA(t1, t2) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\b(BKA|NO_BKA)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GROUP_INDEX, NO_GROUP_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bGROUP_INDEX[^/]*?\\*/\n/\\*+[^/]*?\\bNO_GROUP_INDEX[^/]*?\\*/",
          "recommend": "使用INDEX/NO_INDEX",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MAX_EXECUTION_TIME",
          "originExample": "SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MRR, NO_MRR",
          "originExample": "SELECT /*+ MRR(t1) */ * FROM t1 WHERE f2 <= 3 AND 3 <= f3;",
          "regexp": "/\\*+[^/]*?\\bMRR[^/]*?\\*/\n/\\*+[^/]*?\\bNO_MRR[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_ICP",
          "originExample": "INSERT INTO t3(f1, f2, f3)\n  (SELECT /*+ NO_ICP(t2) */ t2.f1, t2.f2, t2.f3 FROM t1,t2\n   WHERE t1.f1=t2.f1 AND t2.f2 BETWEEN t1.f1\n   AND t1.f2 AND t2.f2 + 1 >= t1.f1 + 1);",
          "regexp": "/\\*+[^/]*?\\bNO_ICP[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_RANGE_OPTIMIZATION",
          "originExample": "SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1\n  FROM t3 WHERE f1 > 30 AND f1 < 33;",
          "regexp": "/\\*+[^/]*?\\bNO_RANGE_OPTIMIZATION[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESOURCE_GROUP",
          "originExample": "INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);",
          "regexp": "/\\*+[^/]*?\\bRESOURCE_GROUP[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "SET [SESSION | @@SESSION. | @@]",
          "originExample": "",
          "regexp": "\\bSET\\s+(@@SESSION\\.|@@(?!GLOBAL)+)",
          "recommend": "SET variable_name = value;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SET  {GLOBAL | @@GLOBAL.}",
          "originExample": "",
          "regexp": "\\bSET\\s+(GLOBAL|@@GLOBAL)",
          "recommend": "ALTER SYSTEM SET variable_name = value;",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "查询中的变量如select t.*,MOD(@x :=  COALESCE(@x, 0) +1, 100) from table",
          "originExample": "",
          "regexp": "(@[0-9a-zA-Z]+\\s*:=)",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "_rowid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看建表语句",
          "syntax": "show create table table_name",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "查看参数",
          "syntax": "show variables like",
          "originExample": "show variables like '%%'",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "INSERT INGORE",
          "originExample": "",
          "regexp": "\\bINSERT\\s+IGNORE",
          "recommend": "使用MERGE INTO",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "指定多个条件",
          "syntax": "DECLARE ... HANDLER",
          "originExample": "",
          "regexp": "\\bDECLARE\\s+(CONTINUE|EXIT|UNDO)\\s+HANDLER\\s+",
          "recommend": "不支持handler",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建一个预备语句",
          "syntax": "PREPARE ... FROM",
          "originExample": "",
          "regexp": "\\bPREPARE\\s+(\\w+|\\`\\w+\\`)\\s+FROM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "执行一个预备语句（带参数）",
          "syntax": "EXECUTE ... USING",
          "originExample": "",
          "regexp": "\\bEXECUTE\\s+(\\w+|\\`\\w+\\`)\\s+USING\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "释放创建的预备语句",
          "syntax": "DROP PREPARE",
          "originExample": "",
          "regexp": "\\bDROP\\s+PREPARE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT * FROM user u force index(idx_user_id_update_time) where u.id=100 order by u.update_time",
          "originExample": "select * from kids force index (idx);",
          "regexp": "\\bforce\\s+index",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "MySQL datetime 支持指定精度",
          "syntax": "datetime(6)",
          "originExample": "如： key1 datetime(6)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "sql_mode",
          "originExample": "SET GLOBAL sql_mode = 'modes';\nSET SESSION sql_mode = 'modes';\nSET sql_mode='NO_UNSIGNED_SUBTRACTION';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "zerofill",
          "originExample": "create table t_d(key1 int(4) zerofill);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "create event",
          "originExample": "CREATE EVENT IF NOT EXISTS e_test ON SCHEDULE EVERY 1 SECOND ON COMPLETION PRESERVE DO CALL e_test(); --------MySQL,隔一秒执行一次e_test",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "bigint(4)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表面、列名等",
          "syntax": "`xxx`",
          "originExample": "",
          "regexp": "\\`\\w+\\`",
          "recommend": "表名、列名等不支持 ` 反引号包裹",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ]
    },
    "OB-MySQL": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "insert into person partition (p_12) (name, age, job) values ('Cart', 8, 'No');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES on duplicate",
          "originExample": "INSERT INTO person partition (p_50) (name, age, job) \nVALUES ('John', 30, 'Engineer')\nON DUPLICATE KEY UPDATE age = VALUES(age), job = VALUES(job);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] SELECT ON DUPLICATE",
          "originExample": "INSERT INTO person PARTITION (p_20, p_50) (name, age)\nSELECT name, age\nFROM kids_1\nON DUPLICATE KEY UPDATE age = VALUES(age);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INTO student VALUES \n  ('Chun', 'SQL', 75), ('Chun', 'Tuning', 73)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "update person, pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "update person partition (p_50),pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "update t1 left join t2 on t1.id = t2.id set t1.name = t2.name;",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "REPLACE INTO VALUES",
          "originExample": "REPLACE INTO person (name, age, job) VALUES ('John', 25, 'Nurse');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "REPLACE INTO t1 SELECT * FROM",
          "originExample": "replace into person select * from pp;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "delete from person partition (p_50) where name = 'Wzy';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2\nWHERE a1.id=a2.id;",
          "originExample": "delete from p1, p2 using person as p1 inner join pp as p2 where p1.name = p2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "DELETE post FROM blog INNER JOIN post WHERE blog.id = post.blog_id;",
          "originExample": "delete pp from person inner join pp where person.name = pp.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tbl_name",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IMPORT TABLE FROM",
          "originExample": "",
          "regexp": "\\bIMPORT\\s+TABLE\\s+FROM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT DELAYED",
          "originExample": "",
          "regexp": "\\bINSERT\\s+DELAYED\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD XML",
          "originExample": "",
          "regexp": "\\bLOAD\\s+XML\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK INSTANCE FOR BACKUP",
          "originExample": "",
          "regexp": "\\bLOCK\\s+INSTANCE\\s+FOR\\s+BACKUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNLOCK INSTANCE",
          "originExample": "",
          "regexp": "\\bUNLOCK\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK TABLES / UNLOCK TABLES",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "XA",
          "originExample": "",
          "regexp": "\\bXA\\s+(START|BEGIN|END|PREPARE|COMMIT|ROLLBACK|RECOVER)\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [LIMIT {[offset,] row_count | row_count OFFSET offset}]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "SET MAX_EXECUTION_TIME = <timeout_in_milliseconds>;",
          "originExample": "SET MAX_EXECUTION_TIME = 30000;\nselect /*+ MAX_EXECUTION_TIME(30000) */ * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update/LOCK IN SHARE MODE [NOWAIT]",
          "originExample": "select * from kids lock in share mode;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= str_to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "select * from kids inner join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "select * from kids cross join kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name union select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join (select * from kids_2) as kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "select * from kids where age = (select max(age)/10 from kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT name,age FROM kids WHERE (name,age) IN (SELECT name,age FROM kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT name FROM kids WHERE EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT name FROM kids WHERE NOT EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "select AVG(kids_age) from (select SUM(age) as kids_age from kids group by name) as k;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "SELECT column1, column2, ...\nFROM table1\nWHERE condition1\nINTERSECT\nSELECT column1, column2, ...\nFROM table2\nWHERE condition2;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name intersect select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "select * from kids union select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "select * from kids union all select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "SELECT * FROM a\nEXCEPT\nSELECT * FROM b",
          "originExample": "select * from kids_2 except select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM kids\n   WHERE name='Jay'\n   UNION\n   SELECT c1.*\n   FROM kids AS c1, kids_2 AS c2\n   WHERE c1.name = c2.name OR c1.age = c2.age )\nSELECT * FROM ancestors;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "SELECT *\nFROM (\n  WITH cte AS (\n    SELECT column1, column2, ...\n    FROM table1\n    WHERE condition\n  )\n  SELECT *\n  FROM cte\n) AS dt",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "select * from kids where kids.name IN(with c2 as (select * from kids_2) select name from c2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "with k1 as (select * from kids),\nk2 as (select * from kids_2)\nselect * from k2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT HIGH_PRIORITY * FROM TABLE1",
          "originExample": "select high_priority * from child_1;",
          "regexp": "\\bhigh_priority\\b",
          "recommend": "可以通过优化查询语句、索引设计、统计信息收集和硬件/系统优化来提升查询的执行效率和优先级",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "into_option: {\n    INTO OUTFILE 'file_name'\n        [CHARACTER SET charset_name]\n        export_options\n  | INTO DUMPFILE 'file_name'\n  | INTO var_name [, var_name] ",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STRAIGHT_JOIN",
          "originExample": "select * from t2 straight_join t1 on t2.a = t1.a;",
          "regexp": "\\bSTRAIGHT_JOIN\\b",
          "recommend": "将STRAIGHT_JOIN改为INNER JOIN，必要时通过hint或force index进行性能优化",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "information_schema库",
          "syntax": "information_schema",
          "originExample": "SELECT\n  TABLE_SCHEMA,\n  TABLE_NAME,\n  ENGINE,\n  TABLE_ROWS,\n  AVG_ROW_LENGTH,\n  INDEX_LENGTH\nFROM\n  information_schema.TABLES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "information_schema.STATISTICS",
          "originExample": "SELECT\n  *\nFROM\n  information_schema.STATISTICS;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "create index idx on test(name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name SELECT",
          "originExample": "create table kids_1 select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table LIKE old_table_name",
          "originExample": "create table kids_3 like kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE sales1 (\n      id INT AUTO_INCREMENT,\n      sale_date DATE,\n      product VARCHAR(50),\n      revenue DECIMAL(10, 2),\n      PRIMARY KEY (id, sale_date)\n) PARTITION BY RANGE COLUMNS(sale_date) (\n      PARTITION p2020 VALUES LESS THAN ('2021-01-01'),\n      PARTITION p2021 VALUES LESS THAN ('2022-01-01'),\n      PARTITION p2022 VALUES LESS THAN ('2023-01-01'),\n      PARTITION p2023 VALUES LESS THAN ('2024-01-01'),\n      PARTITION p2024 VALUES LESS THAN ('2025-01-01')\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD COLUMN col_name column_definition",
          "originExample": "ALTER TABLE person2 ADD COLUMN birth varchar(50);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "alter table children add constraint id_pk primary key(id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": " alter table students drop constraint yy;",
          "originExample": "alter table children drop constraint id_pk;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "alter table person truncate partition p_12;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "alter table person add partition (partition p_110 values less than (110));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t REMOVE PARTITIONING",
          "originExample": "alter table t remove partitioning;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+remove\\s+partitioning",
          "recommend": "不支持 REMOVE PARTITIONING。需要创建新表并进行数据迁移",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;",
          "originExample": "alter table person modify sex int;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME TABLE a TO b\nALTER TABLE t RENAME TO t1",
          "originExample": "rename table test to t;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX index_name ON tbl_name\nALTER TALBE DROP INDEX",
          "originExample": "drop index idx on test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "alter table person drop partition p_110;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER EVENT",
          "originExample": "",
          "regexp": "\\bALTER\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER INSTANCE",
          "originExample": "",
          "regexp": "\\bALTER\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bALTER\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SERVER",
          "originExample": "",
          "regexp": "\\bALTER\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE EVENT",
          "originExample": "",
          "regexp": "\\bCREATE\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "使用DBMS_SCHEDULER 系统包",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bCREATE\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SERVER",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE TRIGGER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP EVENT",
          "originExample": "",
          "regexp": "\\bDROP\\s+EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bDROP\\s+LOGFILE\\s+GROUP",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SERVER",
          "originExample": "",
          "regexp": "\\bDROP\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bDROP\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP TRIGGER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS()",
          "originExample": "select abs(-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BIT_AND",
          "originExample": "SELECT BIT_AND(x)\nFROM (\n    SELECT 4 x\n    UNION\n    SELECT 5 x\n    UNION\n    SELECT 6 x\n) t;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL()",
          "originExample": "SELECT CEIL(2.132);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP()",
          "originExample": "SELECT EXP(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT FLOOR(1.23), FLOOR(-1.23);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(234, 10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "SELECT POWER (2,-2);\nSELECT POW(2,-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "RAND()",
          "originExample": "SELECT RAND();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND()",
          "originExample": "SELECT ROUND(1.298, 0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "SELECT SIGN(-32);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "SELECT SQRT(4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNCATE()",
          "originExample": "SELECT TRUNCATE(1.223,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null or\nx = ''",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHAR()",
          "originExample": "SELECT CHAR(123);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT()",
          "originExample": "SELECT CONCAT('123', '456');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT lower('AAA');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "SELECT LPAD('hi',4,'??');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "SELECT LTRIM('  barbar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "SELECT REPLACE('JACK and JUE','J','BL');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "SELECT RPAD('hi',5,'?');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('barbar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('Sakila' FROM -4 FOR 2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "SELECT TRIM('  bar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "SELECT UPPER('Hej');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE",
          "originExample": "SELECT REVERSE('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII()",
          "originExample": "SELECT ASCII('dx');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR()",
          "originExample": "SELECT INSTR('foobarbar', 'bar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CHAR_LENGTH()",
          "originExample": "SELECT CHAR_LENGTH('dolphin');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR()",
          "originExample": "SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_ADD('2008-01-02', INTERVAL 1 MONTH)\nDATE_SUB",
          "originExample": "SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURDATE()/CURRENT_DATE()",
          "originExample": "SELECT CURRENT_DATE();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP()",
          "originExample": "SELECT CURRENT_TIMESTAMP();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURTIME()/CURRENT_TIME()",
          "originExample": "SELECT CURRENT_TIME();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT()",
          "originExample": "SELECT EXTRACT(YEAR FROM '2019-07-02');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY('2003-02-05');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "PERIOD_DIFF",
          "originExample": "SELECT PERIOD_DIFF(200802,200703);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE(DATE_FORMAT(date,format))",
          "originExample": "SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NOW()\nSYSDATE()",
          "originExample": "SELECT SYSDATE(), NOW();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST('2020-12-12 12:12:12' AS DATETIME(秒后小数点位数))",
          "originExample": "SELECT CAST('2017-08-29 12:10:08.2235' AS DATETIME);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(34.0,3.0,5.0,767.0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "conv('101',2,10)",
          "originExample": "SELECT CONV('a',16,2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST()",
          "originExample": "SELECT CAST('100.5678' AS SIGNED);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SEC_TO_TIME()",
          "originExample": "SELECT SEC_TO_TIME(2378);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_FORMAT",
          "originExample": "SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %W');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IF",
          "originExample": "SELECT IF(1>2,2,3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "SELECT COALESCE(NULL,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(1,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IFNULL",
          "originExample": "SELECT IFNULL(NULL,10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UUID()",
          "originExample": "SELECT UUID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_USER()\nUSER() ",
          "originExample": "SELECT USER();\nSELECT CURRENT_USER();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "SELECT AVG(age) FROM PERSON;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM PERSON; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "CREATE TABLE scores (\n    name VARCHAR(20) PRIMARY KEY,\n    score INT NOT NULL\n);\n\nINSERT INTO\n scores(name, score)\nVALUES\n ('Smith',81),\n ('Jones',55),\n ('Williams',55),\n ('Taylor',62),\n ('Brown',62),\n ('Davies',84),\n ('Evans',87),\n ('Wilson',72),\n ('Thomas',72),\n ('Johnson',100); \n\nSELECT\n name,\n    score,\n    ROW_NUMBER() OVER (ORDER BY score) row_num,\n    CUME_DIST() OVER (ORDER BY score) cume_dist_val\nFROM\n scores; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "CREATE TABLE rankDemo (\n    val INT\n);\n \nINSERT INTO rankDemo(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    DENSE_RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "select MAX(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "select MIN(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "CREATE TABLE sales (\n  id INT AUTO_INCREMENT PRIMARY KEY,\n  product VARCHAR(50),\n  revenue DECIMAL(10, 2)\n);\n\nINSERT INTO sales (product, revenue)\nVALUES\n  ('Product A', 1000.00),\n  ('Product B', 1500.00),\n  ('Product C', 2000.00),\n  ('Product D', 2500.00),\n  ('Product E', 3000.00);\n\nSELECT\n  product,\n  revenue,\n  PERCENT_RANK() OVER (ORDER BY revenue)\nFROM sales;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "CREATE TABLE rankDemo2 (\n    val INT\n);\n \nINSERT INTO rankDemo2(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo2; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": " SELECT STDDEV(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": " SELECT STDDEV_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": " SELECT STDDEV_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT sum(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE()",
          "originExample": "SELECT\n*\nFROM\nJSON_TABLE(\n '[ {\"c1\": null} ]',\n'$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON\nERROR )\n) AS jt;",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "可以使用其他的内置JSON函数来处理JSON数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE()",
          "originExample": "SELECT JSON_VALUE('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY()",
          "originExample": "SELECT JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME());",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG()",
          "originExample": "select json_arrayagg(name) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT()",
          "originExample": "SELECT JSON_OBJECT('id', 87, 'name', 'carrot');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG()",
          "originExample": "CREATE TABLE t_json(c VARCHAR(10), i INT);\n\nINSERT INTO t_json VALUES ('key', 3), ('key', 4), ('key', 5);\n\nSELECT JSON_OBJECTAGG(c, i) FROM t_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GROUP_CONCAT()",
          "originExample": "select group_concat(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE  ntileDemo (\n    val INT NOT NULL\n);\n \nINSERT INTO ntileDemo(val) \nVALUES(1),(2),(3),(4),(5),(6),(7),(8),(9);\n\nSELECT \n    val, \n    NTILE(4) OVER (\n        ORDER BY val\n    ) group_no\nFROM \n    ntileDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "CREATE TABLE basic_pays(\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    salary INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n \nINSERT INTO \n basic_pays(employee_name, \n    department, \n    salary)\nVALUES\n ('Diane Murphy','Accounting',8435),\n ('Mary Patterson','Accounting',9998),\n ('Jeff Firrelli','Accounting',8992),\n ('William Patterson','Accounting',8870),\n ('Gerard Bondur','Accounting',11472),\n ('Anthony Bow','Accounting',6627),\n ('Leslie Jennings','IT',8113),\n ('Leslie Thompson','IT',5186),\n ('Julie Firrelli','Sales',9181),\n ('Steve Patterson','Sales',9441),\n ('Foon Yue Tseng','Sales',6660),\n ('George Vanauf','Sales',10563),\n ('Loui Bondur','SCM',10449),\n ('Gerard Hernandez','SCM',6949),\n ('Pamela Castillo','SCM',11303),\n ('Larry Bott','SCM',11798),\n ('Barry Jones','SCM',10586); \n\nSELECT\n    employee_name,\n    salary,\n    NTH_VALUE(employee_name, 2) OVER  (\n        ORDER BY salary DESC\n    ) second_highest_salary\nFROM\n    basic_pays; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE()",
          "originExample": "CREATE TABLE overtime (\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    hours INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n\nINSERT INTO overtime(employee_name, department, hours)\nVALUES('Diane Murphy','Accounting',37),\n('Mary Patterson','Accounting',74),\n('Jeff Firrelli','Accounting',40),\n('William Patterson','Finance',58),\n('Gerard Bondur','Finance',47),\n('Anthony Bow','Finance',66),\n('Leslie Jennings','IT',90),\n('Leslie Thompson','IT',88),\n('Julie Firrelli','Sales',81),\n('Steve Patterson','Sales',29),\n('Foon Yue Tseng','Sales',65),\n('George Vanauf','Marketing',89),\n('Loui Bondur','Marketing',49),\n('Gerard Hernandez','Marketing',66),\n('Pamela Castillo','SCM',96),\n('Larry Bott','SCM',100),\n('Barry Jones','SCM',65); \n\nSELECT\n    employee_name,\n    hours,\n    FIRST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "SELECT\n    employee_name,\n    LAG(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE()",
          "originExample": "SELECT\n    employee_name,\n    hours,\n    LAST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT\n    employee_name,\n    LEAD(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "find_in_set",
          "originExample": "SELECT FIND_IN_SET('b','a,b,c,d');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "crc32",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "仅日期部分相减",
          "syntax": "datediff",
          "originExample": "SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FROM_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "指定位置替换字符串,replace模式",
          "syntax": "insert",
          "originExample": "SELECT INSERT('Quadratic', 3, 4, 'What');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "是否IPV4",
          "syntax": "IS_IPV4",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_IPV6",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "md5",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回从过去的日期开始的月份",
          "syntax": "month",
          "originExample": "SELECT MONTH('2008-02-03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回月份的名称",
          "syntax": "MONTHNAME",
          "originExample": "SELECT MONTHNAME('2008-02-03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_INSERT_ID()",
          "originExample": "SELECT LAST_INSERT_ID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONVERT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AES_DECRYPT()/AES_ENCRYPT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNHEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "HEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD_FILE()",
          "originExample": "",
          "regexp": "\\bLOAD_FILE\\s*\\(",
          "recommend": "可以使用外部表功能来实现类似的文件加载功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MATCH()",
          "originExample": "",
          "regexp": "\\bMATCH\\s*\\(",
          "recommend": "可以使用全文搜索索引来实现类似的全文搜索功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SOUNDEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADDTIME()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYNAME()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFMONTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFYEAR()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ExtractValue()",
          "originExample": "",
          "regexp": "\\bExtractValue\\s*\\(",
          "recommend": "可以使用XML函数和XPath查询来处理XML数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UpdateXML()",
          "originExample": "",
          "regexp": "\\bUpdateXML\\s*\\(",
          "recommend": "可以使用XML函数和操作符来处理和更新XML数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANDOM_BYTES()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA1()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA2()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GET_LOCK()",
          "originExample": "",
          "regexp": "\\bGET_LOCK\\s*\\(",
          "recommend": "可以使用数据库事务和行级锁来实现锁的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_FREE_LOCK()",
          "originExample": "",
          "regexp": "\\bIS_FREE_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_USED_LOCK()",
          "originExample": "",
          "regexp": "\\bIS_USED_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_ALL_LOCKS()",
          "originExample": "",
          "regexp": "\\bRELEASE_ALL_LOCKS\\s*\\(",
          "recommend": "可以通过执行COMMIT或ROLLBACK语句来释放当前会话中持有的所有锁",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_LOCK()",
          "originExample": "",
          "regexp": "\\bRELEASE_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现释放指定锁的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MASTER_POS_WAIT()",
          "originExample": "",
          "regexp": "\\bMASTER_POS_WAIT\\s*\\(",
          "recommend": "可以通过配置逻辑复制和逻辑解码来实现等待指定二进制日志位置被复制的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NAME_CONST()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIT_XOR()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期或日期时间表达式",
          "syntax": "TIMESTAMP()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "整除 / 求余",
          "syntax": "DIV / MOD",
          "originExample": "select 9 div 2;\nselect 9 mod 2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "安全等于运算符\n严格比较两个NULL值是否相等。",
          "syntax": "<=>",
          "originExample": "select null <=> null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "异或",
          "syntax": "xor",
          "originExample": "select 1 xor 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "与",
          "syntax": "&&",
          "originExample": "select 1 && 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "判断一个值是否存在于集合（数组）中的操作符",
          "syntax": "MEMBER OF()",
          "originExample": "SELECT 17 MEMBER OF('[23, \"abc\", 17, \"ab\", 10]');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回两个参数的弧切线",
          "syntax": "ATAN(x,y)",
          "originExample": "SELECT ATAN(-2,2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将时间值（间隔）添加到日期值",
          "syntax": "ADDDATE()",
          "originExample": "SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从一个时区转换到另一个时区",
          "syntax": "CONVERT_TZ()",
          "originExample": "SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "天数值转换为日期",
          "syntax": "FROM_DAYS()",
          "originExample": "SELECT FROM_DAYS(730669);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期格式字符串",
          "syntax": "GET_FORMAT()",
          "originExample": "SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取小时",
          "syntax": "HOUR()",
          "originExample": "SELECT HOUR('10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "本地时间，同NOW()",
          "syntax": "LOCALTIME()/LOCALTIMESTAMP()",
          "originExample": "SELECT LOCALTIME();\nSELECT LOCALTIMESTAMP();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从年份和年份中的某一天创建日期",
          "syntax": "MAKEDATE()",
          "originExample": "SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从小时、分钟、秒创建时间",
          "syntax": "MAKETIME()",
          "originExample": "SELECT MAKETIME(12,15,30);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数返回微秒",
          "syntax": "MICROSECOND()",
          "originExample": "SELECT MICROSECOND('12:00:00.123456');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数中返回分钟",
          "syntax": "MINUTE()",
          "originExample": "SELECT MINUTE('2008-02-03 10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "给期间添加特定的月数",
          "syntax": "PERIOD_ADD()",
          "originExample": "SELECT PERIOD_ADD(200801,2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从日期参数返回季度",
          "syntax": "QUARTER()",
          "originExample": "SELECT QUARTER('2008-04-01');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回秒数",
          "syntax": "SECOND()",
          "originExample": "SELECT SECOND('10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "使用三个参数调用时 DATE_SUB（） 的同义词",
          "syntax": "SUBDATE()",
          "originExample": "SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "减去时间",
          "syntax": "SUBTIME()",
          "originExample": "SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取传递的表达式的时间部分",
          "syntax": "TIME()",
          "originExample": "SELECT TIME('2003-12-31 01:02:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "格式化为时间",
          "syntax": "TIME_FORMAT()",
          "originExample": "SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向日期时间表达式添加间隔",
          "syntax": "TIMESTAMPADD()",
          "originExample": "SELECT TIMESTAMPADD(MINUTE, 1, '2003-01-02');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期",
          "syntax": "UTC_DATE()",
          "originExample": "SELECT UTC_DATE(), UTC_DATE() + 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 时间",
          "syntax": "UTC_TIME()",
          "originExample": "SELECT UTC_TIME, UTC_TIME() + 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期和时间",
          "syntax": "UTC_TIMESTAMP()",
          "originExample": "SELECT UTC_TIMESTAMP, UTC_TIMESTAMP() + 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回周数",
          "syntax": "WEEK()",
          "originExample": "SELECT WEEK('2008-12-31',1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回工作日索引",
          "syntax": "WEEKDAY()",
          "originExample": "SELECT WEEKDAY('2008-02-03 22:23:00');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回年份和星期",
          "syntax": "YEARWEEK()",
          "originExample": "SELECT YEARWEEK('1987-01-01');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的二进制表示形式",
          "syntax": "BIN()",
          "originExample": "SELECT BIN(12);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，以便对于值位中设置的每个位，您 获取一个 ON 字符串，对于每个未设置的位，您都会得到一个 OFF 字符串",
          "syntax": "EXPORT_SET()",
          "originExample": "SELECT EXPORT_SET(5,'Y','N',',',4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回格式化为指定小数位数的数字",
          "syntax": "FORMAT()",
          "originExample": "SELECT FORMAT(12332.123456, 4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一组逗号分隔的字符串，这些字符串具有 位中的相应位集",
          "syntax": "MAKE_SET()",
          "originExample": "SELECT MAKE_SET(1,'a','b','c');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "REGEXP 的否定",
          "syntax": "NOT REGEXP",
          "originExample": "SELECT 'a' NOT REGEXP '^[a-d]';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP",
          "originExample": "SELECT 'a' REGEXP '^[a-d]';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "RLIKE",
          "originExample": "SELECT 'a' RLIKE '^[a-d]';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的八进制表示形式",
          "syntax": "OCT()",
          "originExample": "SELECT OCT(12);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数最左边字符的字符代码",
          "syntax": "ORD()",
          "originExample": "SELECT ORD('2');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转义参数以在 SQL 语句中使用",
          "syntax": "QUOTE()",
          "originExample": "SELECT QUOTE('Don\\'t!');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP_LIKE()",
          "originExample": "SELECT REGEXP_LIKE('CamelCase', 'CAMELCASE');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较soundex()值",
          "syntax": "SOUNDS LIKE",
          "originExample": "expr1 SOUNDS LIKE expr2\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).",
          "regexp": "\\bSOUNDS\\s+LIKE\\b",
          "recommend": "不支持sounds like",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从指定数量的 分隔符的出现次数",
          "syntax": "SUBSTRING_INDEX()",
          "originExample": "SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串的权重字符串",
          "syntax": "WEIGHT_STRING()",
          "originExample": "SELECT WEIGHT_STRING('ab'); ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回设置的位数",
          "syntax": "BIT_COUNT()",
          "originExample": "SELECT BIT_COUNT(64);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算语句摘要哈希值",
          "syntax": "STATEMENT_DIGEST()",
          "originExample": "SELECT STATEMENT_DIGEST('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算规范化语句摘要",
          "syntax": "STATEMENT_DIGEST_TEXT()",
          "originExample": "SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST_TEXT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回压缩前字符串的长度",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "确定密码的强度",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "SELECT VALIDATE_PASSWORD_STRENGTH('weak');",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "重复执行表达式",
          "syntax": "BENCHMARK()",
          "originExample": "SELECT BENCHMARK(1000000,MD5('goodbye'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的字符集",
          "syntax": "CHARSET()",
          "originExample": "SELECT CHARSET('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则强制值",
          "syntax": "COERCIBILITY()",
          "originExample": "SELECT COERCIBILITY('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则",
          "syntax": "COLLATION()",
          "originExample": "SELECT COLLATION('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回连接的连接 ID（线程 ID）",
          "syntax": "CONNECTION_ID()",
          "originExample": "SELECT CONNECTION_ID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前活动角色",
          "syntax": "CURRENT_ROLE()",
          "originExample": "SELECT CURRENT_ROLE();",
          "regexp": "\\bCURRENT_ROLE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FOUND_ROWS()",
          "originExample": "SELECT FOUND_ROWS();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "ICU 库版本",
          "syntax": "ICU_VERSION()",
          "originExample": "select ICU_VERSION();",
          "regexp": "\\bICU_VERSION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表示内存角色子图的 GraphML 文档",
          "syntax": "ROLES_GRAPHML()",
          "originExample": "SELECT ROLES_GRAPHML();",
          "regexp": "\\bROLES_GRAPHML\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "更新的行数",
          "syntax": "ROW_COUNT()",
          "originExample": "SELECT ROW_COUNT();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回默认（当前）数据库名称",
          "syntax": "SCHEMA()",
          "originExample": "SELECT SCHEMA();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "客户端提供的用户名和主机名",
          "syntax": "SYSTEM_USER()",
          "originExample": "SELECT SYSTEM_USER();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeomCollection()",
          "originExample": "SELECT GeomCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeometryCollection()",
          "originExample": "SELECT GeometryCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 Point 值构造 LineString",
          "syntax": "LineString()",
          "originExample": "SELECT LineString(Point(2, 2), Point(3, 3));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何图形的 MBR 是否包含另一个几何图形的 MBR",
          "syntax": "MBRContains()",
          "originExample": "SELECT MBRContains(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRContains\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否被另一个MBR覆盖",
          "syntax": "MBRCoveredBy()",
          "originExample": "SELECT MBRCoveredby(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCoveredBy\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否覆盖另一个MBR",
          "syntax": "MBRCovers()",
          "originExample": "SELECT MBRCovers(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCovers\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否不相交",
          "syntax": "MBRDisjoint()",
          "originExample": "SELECT MBRDisjoint(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRDisjoint\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否相等",
          "syntax": "MBREquals()",
          "originExample": "SELECT MBREquals(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBREquals\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的 MBR 是否相交",
          "syntax": "MBRIntersects()",
          "originExample": "SELECT MBRIntersects(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRIntersects\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否重叠",
          "syntax": "MBROverlaps()",
          "originExample": "SELECT MBROverlaps(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBROverlaps\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两种几何形状的MBR是否接触",
          "syntax": "MBRTouches()",
          "originExample": "SELECT MBRTouches(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRTouches\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何形状的 MBR 是否在另一个几何形状的 MBR 范围内",
          "syntax": "MBRWithin()",
          "originExample": "SELECT MBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRWithin\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 LineString 值构造 MultiLineString",
          "syntax": "MultiLineString()",
          "originExample": "SELECT MultiLineString(\n    LineString(Point(2, 2), Point(3, 3)),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从点值构造 MultiPoint",
          "syntax": "MultiPoint()",
          "originExample": "SELECT MultiPoint(\n    Point(1, 1),\n    Point(2, 2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从多边形值构造 MultiPolygon",
          "syntax": "MultiPolygon()",
          "originExample": "SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';\nSELECT ST_Area(ST_GeomFromText(@mpoly));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将数据追加到 JSON 文档",
          "syntax": "JSON_ARRAY_APPEND()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入到 JSON 数组中",
          "syntax": "JSON_ARRAY_INSERT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档的最大深度",
          "syntax": "JSON_DEPTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中的键数组",
          "syntax": "JSON_KEYS()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON文档中的元素数",
          "syntax": "JSON_LENGTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，替换重复键的值",
          "syntax": "JSON_MERGE_PATCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE_PRESERVE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较两个 JSON 文档，如果这些文档有任何 TRUE（1），则返回 TRUE （0） 键值对或数组元素相同，否则为 FALSE （<>）",
          "syntax": "JSON_OVERLAPS()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "引用 JSON 文档",
          "syntax": "JSON_QUOTE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;如果出现以下情况，则返回 TRUE/1 document 根据架构进行验证，如果没有，则为 FALSE/0",
          "syntax": "JSON_SCHEMA_VALID()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;以 JSON 格式返回报告 验证结果的格式，包括成功或失败，以及 失败原因",
          "syntax": "JSON_SCHEMA_VALIDATION_REPORT()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALIDATION_REPORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中值的路径",
          "syntax": "JSON_SEARCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 列值的二进制表示形式中的释放空间 以下部分更新",
          "syntax": "JSON_STORAGE_FREE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "用于存储 JSON 文档的二进制表示形式的空间",
          "syntax": "JSON_STORAGE_SIZE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 值的类型",
          "syntax": "JSON_TYPE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "取消对 JSON 值的引用",
          "syntax": "JSON_UNQUOTE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON值是否有效",
          "syntax": "JSON_VALID()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回总体标准差",
          "syntax": "STD()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表列的默认值",
          "syntax": "DEFAULT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将超级聚合 ROLLUP 行与常规行区分开来",
          "syntax": "GROUPING()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IP 地址的数值",
          "syntax": "INET_ATON()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IP 地址",
          "syntax": "INET_NTOA()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IPv6 地址的数值",
          "syntax": "INET6_ATON()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IPv6 地址",
          "syntax": "INET6_NTOA()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 兼容地址",
          "syntax": "IS_IPV4_COMPAT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 映射地址",
          "syntax": "IS_IPV4_MAPPED()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为有效的 UUID",
          "syntax": "IS_UUID()",
          "originExample": "",
          "regexp": "\\bIS_UUID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "睡眠几秒钟",
          "syntax": "SLEEP()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回整数值通用标识符",
          "syntax": "UUID_SHORT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "originExample": "SELECT\n/*+ JOIN_PREFIX(t2, t5@subq2, t4@subq1)\n    JOIN_ORDER(t4@subq1, t3)\n    JOIN_SUFFIX(t1) */\nCOUNT(*) FROM t1 JOIN t2 JOIN t3\n           WHERE t1.f1 IN (SELECT /*+ QB_NAME(subq1) */ f1 FROM t4)\n             AND t2.f1 IN (SELECT /*+ QB_NAME(subq2) */ f1 FROM t5);",
          "regexp": "/\\*+[^/]*?\\b(JOIN_PREFIX|JOIN_SUFFIX|JOIN_ORDER)\\b[^/]*?\\*/",
          "recommend": "使用ORDERED、LEADING代替",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "JOIN_FIXED_ORDER/STRAIGHT_JOIN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\b(JOIN_FIXED_ORDER|STRAIGHT_JOIN)\\b[^/]*?\\*/",
          "recommend": "使用ORDERED、LEADING代替",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bNO_INDEX\\b[^/]*?\\*/",
          "recommend": "使用IGNORE INDEX",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDER_INDEX, NO_ORDER_INDEX,FORCE INDEX",
          "originExample": "SELECT /*+ NO_ORDER_INDEX(t1 i_b,i_c) */ a,c\n    FROM t1\n    ORDER BY a;",
          "regexp": "/\\*+[^/]*?\\b(ORDER_INDEX|NO_ORDER_INDEX|FORCE\\s+INDEX)[^/]*?\\*/",
          "recommend": "使用INDEX Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_MERGE",
          "originExample": "SELECT /*+ INDEX_MERGE(t1 f3, PRIMARY) */ f2 FROM t1\n  WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;",
          "regexp": "/\\*+[^/]*?\\bINDEX_MERGE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SKIP_SCAN, NO_SKIP_SCAN",
          "originExample": "SELECT /*+ SKIP_SCAN(t1 PRIMARY) */ f1, f2\n  FROM t1 WHERE f2 > 40;",
          "regexp": "/\\*+[^/]*?\\b(skip_scan|no_skip_scan)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "use_invisible_indexes=off",
          "originExample": "",
          "regexp": "\\buse_invisible_indexes\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BNL/NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\b(BNL|NO_BNL)[^/]*?\\*/",
          "recommend": "使用USE_BNL",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN, NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN(@subq1 FIRSTMATCH, LOOSESCAN) */ * FROM t2\n  WHERE t2.a IN (SELECT /*+ QB_NAME(subq1) */ a FROM t3);",
          "regexp": "/\\*+[^/]*?\\b(SEMIJOIN|NO_SEMIJOIN)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE, NO_MERGE",
          "originExample": "SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;",
          "regexp": "/\\*+[^/]*?\\b(MERGE|NO_MERGE)[^/]*?\\*/",
          "recommend": "使用USE_MERGE",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "DERIVED_CONDITION_PUSHDOWN, NO_DERIVED_CONDITION_PUSHDOWN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\b(DERIVED_CONDITION_PUSHDOWN|NO_DERIVED_CONDITION_PUSHDOWN)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SET_VAR(sql_log_bin = off)",
          "originExample": "SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;",
          "regexp": "/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_CACHE/SQL_NO_CACHE",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\bSQL_NO_CACHE\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_BIG_RESULT/SQL_SMALL_RESULT",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_BIG_RESULT|SQL_SMALL_RESULT)\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BKA, NO_BKA",
          "originExample": "SELECT /*+ NO_BKA(t1, t2) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\b(BKA|NO_BKA)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GROUP_INDEX, NO_GROUP_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\b(GROUP_INDEX|NO_GROUP_INDEX)[^/]*?\\*/",
          "recommend": "使用INDEX Hint替代",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MAX_EXECUTION_TIME",
          "originExample": "SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …",
          "regexp": "/\\*+[^/]*?\\bMAX_EXECUTION_TIME[^/]*?\\*/",
          "recommend": "使用QUERY_TIMEOUT",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MRR, NO_MRR",
          "originExample": "SELECT /*+ MRR(t1) */ * FROM t1 WHERE f2 <= 3 AND 3 <= f3;",
          "regexp": "/\\*+[^/]*?\\b(MRR|NO_MRR)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_ICP",
          "originExample": "INSERT INTO t3(f1, f2, f3)\n  (SELECT /*+ NO_ICP(t2) */ t2.f1, t2.f2, t2.f3 FROM t1,t2\n   WHERE t1.f1=t2.f1 AND t2.f2 BETWEEN t1.f1\n   AND t1.f2 AND t2.f2 + 1 >= t1.f1 + 1);",
          "regexp": "/\\*+[^/]*?\\bNO_ICP[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_RANGE_OPTIMIZATION",
          "originExample": "SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1\n  FROM t3 WHERE f1 > 30 AND f1 < 33;",
          "regexp": "/\\*+[^/]*?\\bNO_RANGE_OPTIMIZATION[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESOURCE_GROUP",
          "originExample": "INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);",
          "regexp": "/\\*+[^/]*?\\bRESOURCE_GROUP[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "SET [SESSION | @@SESSION. | @@]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SET  {GLOBAL | @@GLOBAL.}",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "查询中的变量如select t.*,MOD(@x :=  COALESCE(@x, 0) +1, 100) from table",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "_rowid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看建表语句",
          "syntax": "show create table table_name",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "查看参数",
          "syntax": "show variables like",
          "originExample": "show variables like '%%'",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "INSERT INGORE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "指定多个条件",
          "syntax": "DECLARE ... HANDLER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建一个预备语句",
          "syntax": "PREPARE ... FROM",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "执行一个预备语句（带参数）",
          "syntax": "EXECUTE ... USING",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "释放创建的预备语句",
          "syntax": "DROP PREPARE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT * FROM user u force index(idx_user_id_update_time) where u.id=100 order by u.update_time",
          "originExample": "select * from kids force index (idx);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "MySQL datetime 支持指定精度",
          "syntax": "datetime(6)",
          "originExample": "如： key1 datetime(6)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "sql_mode",
          "originExample": "SET GLOBAL sql_mode = 'modes';\nSET SESSION sql_mode = 'modes';\nSET sql_mode='NO_UNSIGNED_SUBTRACTION';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "zerofill",
          "originExample": "create table t_d(key1 int(4) zerofill);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "create event",
          "originExample": "CREATE EVENT IF NOT EXISTS e_test ON SCHEDULE EVERY 1 SECOND ON COMPLETION PRESERVE DO CALL e_test(); --------MySQL,隔一秒执行一次e_test",
          "regexp": "CREATE\\s+EVENT\\b",
          "recommend": "使用DBMS_SCHEDULER 系统包",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "bigint(4)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "openGauss": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "insert into person partition (p_12) (name, age, job) values ('Cart', 8, 'No');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES on duplicate",
          "originExample": "INSERT INTO person partition (p_50) (name, age, job) \nVALUES ('John', 30, 'Engineer')\nON DUPLICATE KEY UPDATE age = VALUES(age), job = VALUES(job);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] SELECT ON DUPLICATE",
          "originExample": "INSERT INTO person PARTITION (p_20, p_50) (name, age)\nSELECT name, age\nFROM kids_1\nON DUPLICATE KEY UPDATE age = VALUES(age);",
          "regexp": "\\binsert\\s+into\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+partition\\s*\\((\\w+|\\`\\w+\\`)(\\s*,\\s*(\\w+|\\`\\w+\\`)\\s*)+\\)",
          "recommend": "partition只支持一个参数的用法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INTO student VALUES \n  ('Chun', 'SQL', 75), ('Chun', 'Tuning', 73)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "update person, pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "update person partition (p_50),pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "update t1 left join t2 on t1.id = t2.id set t1.name = t2.name;",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "REPLACE INTO VALUES",
          "originExample": "REPLACE INTO person (name, age, job) VALUES ('John', 25, 'Nurse');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "REPLACE INTO t1 SELECT * FROM",
          "originExample": "replace into person select * from pp;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "delete from person partition (p_50) where name = 'Wzy';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2\nWHERE a1.id=a2.id;",
          "originExample": "delete from p1, p2 using person as p1 inner join pp as p2 where p1.name = p2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "DELETE post FROM blog INNER JOIN post WHERE blog.id = post.blog_id;",
          "originExample": "delete pp from person inner join pp where person.name = pp.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tbl_name",
          "originExample": "",
          "regexp": "\\bLOAD\\s+DATA\\s+(LOW_PRIORITY|CONCURRENT|LOCAL\\s+)?INFILE\\b",
          "recommend": "需要开启enable_copy_server_files参数。需要gs_role_copy_files权限。",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "IMPORT TABLE FROM",
          "originExample": "",
          "regexp": "\\bIMPORT\\s+TABLE\\s+FROM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT DELAYED",
          "originExample": "",
          "regexp": "\\bINSERT\\s+DELAYED\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD XML",
          "originExample": "",
          "regexp": "\\bLOAD\\s+XML\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK INSTANCE FOR BACKUP",
          "originExample": "",
          "regexp": "\\bLOCK\\s+INSTANCE\\s+FOR\\s+BACKUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNLOCK INSTANCE",
          "originExample": "",
          "regexp": "\\bUNLOCK\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK TABLES / UNLOCK TABLES",
          "originExample": "",
          "regexp": "\\b(LOCK|UNLOCK)\\s+TABLES\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "XA",
          "originExample": "",
          "regexp": "\\bXA\\s+(START|BEGIN|END|PREPARE|COMMIT|ROLLBACK|RECOVER)\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [LIMIT {[offset,] row_count | row_count OFFSET offset}]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "SET MAX_EXECUTION_TIME = <timeout_in_milliseconds>;",
          "originExample": "SET MAX_EXECUTION_TIME = 30000;\nselect /*+ MAX_EXECUTION_TIME(30000) */ * from kids;",
          "regexp": "\\bMAX_EXECUTION_TIME\\b",
          "recommend": "可设置statement_timeout，如set statement_timeout to 30000",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update/LOCK IN SHARE MODE [NOWAIT]",
          "originExample": "select * from kids lock in share mode;",
          "regexp": "\\block\\s+in\\s+share\\s+mode",
          "recommend": "使用FOR READ ONLY",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= str_to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "select * from kids inner join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "select * from kids cross join kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name union select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join (select * from kids_2) as kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "select * from kids where age = (select max(age)/10 from kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT name,age FROM kids WHERE (name,age) IN (SELECT name,age FROM kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT name FROM kids WHERE EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT name FROM kids WHERE NOT EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "select AVG(kids_age) from (select SUM(age) as kids_age from kids group by name) as k;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "SELECT column1, column2, ...\nFROM table1\nWHERE condition1\nINTERSECT\nSELECT column1, column2, ...\nFROM table2\nWHERE condition2;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name intersect select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "select * from kids union select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "select * from kids union all select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "SELECT * FROM a\nEXCEPT\nSELECT * FROM b",
          "originExample": "select * from kids_2 except select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM kids\n   WHERE name='Jay'\n   UNION\n   SELECT c1.*\n   FROM kids AS c1, kids_2 AS c2\n   WHERE c1.name = c2.name OR c1.age = c2.age )\nSELECT * FROM ancestors;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "SELECT *\nFROM (\n  WITH cte AS (\n    SELECT column1, column2, ...\n    FROM table1\n    WHERE condition\n  )\n  SELECT *\n  FROM cte\n) AS dt",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "select * from kids where kids.name IN(with c2 as (select * from kids_2) select name from c2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "with k1 as (select * from kids),\nk2 as (select * from kids_2)\nselect * from k2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bselect\\b.*\\bdistinctrow\\b",
          "recommend": "改用distinct",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT HIGH_PRIORITY * FROM TABLE1",
          "originExample": "select high_priority * from child_1;",
          "regexp": "\\bhigh_priority\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "into_option: {\n    INTO OUTFILE 'file_name'\n        [CHARACTER SET charset_name]\n        export_options\n  | INTO DUMPFILE 'file_name'\n  | INTO var_name [, var_name] ",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STRAIGHT_JOIN",
          "originExample": "select * from t2 straight_join t1 on t2.a = t1.a;",
          "regexp": "\\bSTRAIGHT_JOIN\\b",
          "recommend": "将STRAIGHT_JOIN改为INNER JOIN，必要时通过hint或force index进行性能优化",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "information_schema库",
          "syntax": "information_schema",
          "originExample": "SELECT\n  TABLE_SCHEMA,\n  TABLE_NAME,\n  ENGINE,\n  TABLE_ROWS,\n  AVG_ROW_LENGTH,\n  INDEX_LENGTH\nFROM\n  information_schema.TABLES;",
          "regexp": "\\binformation_schema\\.(columns|tables|table_constraints|key_column_usage)\\b",
          "recommend": "information_schema库下系统表columns、tables、table_constraints、key_column_usage中字段可能存在差异，请确认后再使用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "information_schema.STATISTICS",
          "originExample": "SELECT\n  *\nFROM\n  information_schema.STATISTICS;",
          "regexp": "\\binformation_schema\\.STATISTICS\\b",
          "recommend": "information_schema库下不存在STATISTICS表",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "create index idx on test(name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name SELECT",
          "originExample": "create table kids_1 select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table LIKE old_table_name",
          "originExample": "create table kids_3 like kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE sales1 (\n      id INT AUTO_INCREMENT,\n      sale_date DATE,\n      product VARCHAR(50),\n      revenue DECIMAL(10, 2),\n      PRIMARY KEY (id, sale_date)\n) PARTITION BY RANGE COLUMNS(sale_date) (\n      PARTITION p2020 VALUES LESS THAN ('2021-01-01'),\n      PARTITION p2021 VALUES LESS THAN ('2022-01-01'),\n      PARTITION p2022 VALUES LESS THAN ('2023-01-01'),\n      PARTITION p2023 VALUES LESS THAN ('2024-01-01'),\n      PARTITION p2024 VALUES LESS THAN ('2025-01-01')\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD COLUMN col_name column_definition",
          "originExample": "ALTER TABLE person2 ADD COLUMN birth varchar(50);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "alter table children add constraint id_pk primary key(id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": " alter table students drop constraint yy;",
          "originExample": "alter table children drop constraint id_pk;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "alter table person truncate partition p_12;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "alter table person add partition (partition p_110 values less than (110));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t REMOVE PARTITIONING",
          "originExample": "alter table t remove partitioning;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;",
          "originExample": "alter table person modify sex int;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME TABLE a TO b\nALTER TABLE t RENAME TO t1",
          "originExample": "rename table test to t;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX index_name ON tbl_name\nALTER TALBE DROP INDEX",
          "originExample": "drop index idx on test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "alter table person drop partition p_110;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER EVENT",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER INSTANCE",
          "originExample": "",
          "regexp": "\\bALTER\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bALTER\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SERVER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE EVENT",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bCREATE\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SERVER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE TRIGGER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP EVENT",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bDROP\\s+LOGFILE\\s+GROUP",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SERVER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bDROP\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP TRIGGER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS()",
          "originExample": "select abs(-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BIT_AND",
          "originExample": "SELECT BIT_AND(x)\nFROM (\n    SELECT 4 x\n    UNION\n    SELECT 5 x\n    UNION\n    SELECT 6 x\n) t;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL()",
          "originExample": "SELECT CEIL(2.132);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP()",
          "originExample": "SELECT EXP(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT FLOOR(1.23), FLOOR(-1.23);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(234, 10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "SELECT POWER (2,-2);\nSELECT POW(2,-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "RAND()",
          "originExample": "SELECT RAND();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND()",
          "originExample": "SELECT ROUND(1.298, 0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "SELECT SIGN(-32);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "SELECT SQRT(4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNCATE()",
          "originExample": "SELECT TRUNCATE(1.223,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null or\nx = ''",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHAR()",
          "originExample": "SELECT CHAR(123);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT()",
          "originExample": "SELECT CONCAT('123', '456');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT lower('AAA');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "SELECT LPAD('hi',4,'??');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "SELECT LTRIM('  barbar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "SELECT REPLACE('JACK and JUE','J','BL');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "SELECT RPAD('hi',5,'?');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('barbar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('Sakila' FROM -4 FOR 2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "SELECT TRIM('  bar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "SELECT UPPER('Hej');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE",
          "originExample": "SELECT REVERSE('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII()",
          "originExample": "SELECT ASCII('dx');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR()",
          "originExample": "SELECT INSTR('foobarbar', 'bar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CHAR_LENGTH()",
          "originExample": "SELECT CHAR_LENGTH('dolphin');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR()",
          "originExample": "SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_ADD('2008-01-02', INTERVAL 1 MONTH)\nDATE_SUB",
          "originExample": "SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURDATE()/CURRENT_DATE()",
          "originExample": "SELECT CURRENT_DATE();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP()",
          "originExample": "SELECT CURRENT_TIMESTAMP();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURTIME()/CURRENT_TIME()",
          "originExample": "SELECT CURRENT_TIME();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT()",
          "originExample": "SELECT EXTRACT(YEAR FROM '2019-07-02');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY('2003-02-05');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "PERIOD_DIFF",
          "originExample": "SELECT PERIOD_DIFF(200802,200703);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE(DATE_FORMAT(date,format))",
          "originExample": "SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NOW()\nSYSDATE()",
          "originExample": "SELECT SYSDATE(), NOW();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST('2020-12-12 12:12:12' AS DATETIME(秒后小数点位数))",
          "originExample": "SELECT CAST('2017-08-29 12:10:08.2235' AS DATETIME);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(34.0,3.0,5.0,767.0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "conv('101',2,10)",
          "originExample": "SELECT CONV('a',16,2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST()",
          "originExample": "SELECT CAST('100.5678' AS SIGNED);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SEC_TO_TIME()",
          "originExample": "SELECT SEC_TO_TIME(2378);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_FORMAT",
          "originExample": "SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %W');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IF",
          "originExample": "SELECT IF(1>2,2,3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "SELECT COALESCE(NULL,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(1,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IFNULL",
          "originExample": "SELECT IFNULL(NULL,10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UUID()",
          "originExample": "SELECT UUID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_USER()\nUSER() ",
          "originExample": "SELECT USER();\nSELECT CURRENT_USER();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "SELECT AVG(age) FROM PERSON;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM PERSON; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "CREATE TABLE scores (\n    name VARCHAR(20) PRIMARY KEY,\n    score INT NOT NULL\n);\n\nINSERT INTO\n scores(name, score)\nVALUES\n ('Smith',81),\n ('Jones',55),\n ('Williams',55),\n ('Taylor',62),\n ('Brown',62),\n ('Davies',84),\n ('Evans',87),\n ('Wilson',72),\n ('Thomas',72),\n ('Johnson',100); \n\nSELECT\n name,\n    score,\n    ROW_NUMBER() OVER (ORDER BY score) row_num,\n    CUME_DIST() OVER (ORDER BY score) cume_dist_val\nFROM\n scores; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "CREATE TABLE rankDemo (\n    val INT\n);\n \nINSERT INTO rankDemo(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    DENSE_RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "select MAX(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "select MIN(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "CREATE TABLE sales (\n  id INT AUTO_INCREMENT PRIMARY KEY,\n  product VARCHAR(50),\n  revenue DECIMAL(10, 2)\n);\n\nINSERT INTO sales (product, revenue)\nVALUES\n  ('Product A', 1000.00),\n  ('Product B', 1500.00),\n  ('Product C', 2000.00),\n  ('Product D', 2500.00),\n  ('Product E', 3000.00);\n\nSELECT\n  product,\n  revenue,\n  PERCENT_RANK() OVER (ORDER BY revenue)\nFROM sales;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "CREATE TABLE rankDemo2 (\n    val INT\n);\n \nINSERT INTO rankDemo2(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo2; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": " SELECT STDDEV(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": " SELECT STDDEV_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": " SELECT STDDEV_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT sum(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE()",
          "originExample": "SELECT\n*\nFROM\nJSON_TABLE(\n '[ {\"c1\": null} ]',\n'$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON\nERROR )\n) AS jt;",
          "regexp": "\\bjson_table\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE()",
          "originExample": "SELECT JSON_VALUE('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname');",
          "regexp": "\\bJSON_VALUE\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY()",
          "originExample": "SELECT JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME());",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG()",
          "originExample": "select json_arrayagg(name) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT()",
          "originExample": "SELECT JSON_OBJECT('id', 87, 'name', 'carrot');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG()",
          "originExample": "CREATE TABLE t_json(c VARCHAR(10), i INT);\n\nINSERT INTO t_json VALUES ('key', 3), ('key', 4), ('key', 5);\n\nSELECT JSON_OBJECTAGG(c, i) FROM t_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GROUP_CONCAT()",
          "originExample": "select group_concat(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE  ntileDemo (\n    val INT NOT NULL\n);\n \nINSERT INTO ntileDemo(val) \nVALUES(1),(2),(3),(4),(5),(6),(7),(8),(9);\n\nSELECT \n    val, \n    NTILE(4) OVER (\n        ORDER BY val\n    ) group_no\nFROM \n    ntileDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "CREATE TABLE basic_pays(\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    salary INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n \nINSERT INTO \n basic_pays(employee_name, \n    department, \n    salary)\nVALUES\n ('Diane Murphy','Accounting',8435),\n ('Mary Patterson','Accounting',9998),\n ('Jeff Firrelli','Accounting',8992),\n ('William Patterson','Accounting',8870),\n ('Gerard Bondur','Accounting',11472),\n ('Anthony Bow','Accounting',6627),\n ('Leslie Jennings','IT',8113),\n ('Leslie Thompson','IT',5186),\n ('Julie Firrelli','Sales',9181),\n ('Steve Patterson','Sales',9441),\n ('Foon Yue Tseng','Sales',6660),\n ('George Vanauf','Sales',10563),\n ('Loui Bondur','SCM',10449),\n ('Gerard Hernandez','SCM',6949),\n ('Pamela Castillo','SCM',11303),\n ('Larry Bott','SCM',11798),\n ('Barry Jones','SCM',10586); \n\nSELECT\n    employee_name,\n    salary,\n    NTH_VALUE(employee_name, 2) OVER  (\n        ORDER BY salary DESC\n    ) second_highest_salary\nFROM\n    basic_pays; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE()",
          "originExample": "CREATE TABLE overtime (\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    hours INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n\nINSERT INTO overtime(employee_name, department, hours)\nVALUES('Diane Murphy','Accounting',37),\n('Mary Patterson','Accounting',74),\n('Jeff Firrelli','Accounting',40),\n('William Patterson','Finance',58),\n('Gerard Bondur','Finance',47),\n('Anthony Bow','Finance',66),\n('Leslie Jennings','IT',90),\n('Leslie Thompson','IT',88),\n('Julie Firrelli','Sales',81),\n('Steve Patterson','Sales',29),\n('Foon Yue Tseng','Sales',65),\n('George Vanauf','Marketing',89),\n('Loui Bondur','Marketing',49),\n('Gerard Hernandez','Marketing',66),\n('Pamela Castillo','SCM',96),\n('Larry Bott','SCM',100),\n('Barry Jones','SCM',65); \n\nSELECT\n    employee_name,\n    hours,\n    FIRST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "SELECT\n    employee_name,\n    LAG(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE()",
          "originExample": "SELECT\n    employee_name,\n    hours,\n    LAST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT\n    employee_name,\n    LEAD(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "find_in_set",
          "originExample": "SELECT FIND_IN_SET('b','a,b,c,d');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "crc32",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "仅日期部分相减",
          "syntax": "datediff",
          "originExample": "SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FROM_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "指定位置替换字符串,replace模式",
          "syntax": "insert",
          "originExample": "SELECT INSERT('Quadratic', 3, 4, 'What');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "是否IPV4",
          "syntax": "IS_IPV4",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_IPV6",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "md5",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回从过去的日期开始的月份",
          "syntax": "month",
          "originExample": "SELECT MONTH('2008-02-03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回月份的名称",
          "syntax": "MONTHNAME",
          "originExample": "SELECT MONTHNAME('2008-02-03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_INSERT_ID()",
          "originExample": "SELECT LAST_INSERT_ID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONVERT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AES_DECRYPT()/AES_ENCRYPT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNHEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "HEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD_FILE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MATCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SOUNDEX()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADDTIME()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYNAME()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFMONTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFYEAR()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ExtractValue()",
          "originExample": "",
          "regexp": "\\bExtractValue\\s*\\(",
          "recommend": "可以使用XML函数和XPath查询来处理XML数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UpdateXML()",
          "originExample": "",
          "regexp": "\\bUpdateXML\\s*\\(",
          "recommend": "可以使用XML函数和操作符来处理和更新XML数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANDOM_BYTES()",
          "originExample": "",
          "regexp": "\\bRANDOM_BYTES\\s*\\(",
          "recommend": "可以使用gen_random_bytes()函数来生成随机字节序列",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA1()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA2()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "可以使用octet_length()函数来获取压缩数据解压缩后的字节长度",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "可以通过自定义密码策略和适当的方法来评估密码的强度",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GET_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_FREE_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_USED_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_ALL_LOCKS()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_LOCK()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MASTER_POS_WAIT()",
          "originExample": "",
          "regexp": "\\bMASTER_POS_WAIT\\s*\\(",
          "recommend": "可以通过配置逻辑复制和逻辑解码来实现等待指定二进制日志位置被复制的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NAME_CONST()",
          "originExample": "",
          "regexp": "\\bNAME_CONST\\s*\\(",
          "recommend": "可以使用SELECT语句和常量值来实现返回常量值的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIT_XOR()",
          "originExample": "",
          "regexp": "\\bBIT_XOR\\b",
          "recommend": "可以使用位运算符^来执行按位异或操作",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期或日期时间表达式",
          "syntax": "TIMESTAMP()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "整除 / 求余",
          "syntax": "DIV / MOD",
          "originExample": "select 9 div 2;\nselect 9 mod 2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "安全等于运算符\n严格比较两个NULL值是否相等。",
          "syntax": "<=>",
          "originExample": "select null <=> null;",
          "regexp": "\\s*<=>\\s*",
          "recommend": "运算结果与MySQL不一致",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "异或",
          "syntax": "xor",
          "originExample": "select 1 xor 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "与",
          "syntax": "&&",
          "originExample": "select 1 && 1;",
          "regexp": "\\s+\\&\\&\\s+",
          "recommend": "不支持&&，尝试使用AND代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "判断一个值是否存在于集合（数组）中的操作符",
          "syntax": "MEMBER OF()",
          "originExample": "SELECT 17 MEMBER OF('[23, \"abc\", 17, \"ab\", 10]');",
          "regexp": "\\bMEMBER\\s+OF\\s*\\(",
          "recommend": "不支持member of()，请尝试使用LIKE或正则代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回两个参数的弧切线",
          "syntax": "ATAN(x,y)",
          "originExample": "SELECT ATAN(-2,2);",
          "regexp": "\\bATAN\\s*\\(\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*,\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*\\)",
          "recommend": "使用ATAN2()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将时间值（间隔）添加到日期值",
          "syntax": "ADDDATE()",
          "originExample": "SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从一个时区转换到另一个时区",
          "syntax": "CONVERT_TZ()",
          "originExample": "SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "天数值转换为日期",
          "syntax": "FROM_DAYS()",
          "originExample": "SELECT FROM_DAYS(730669);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期格式字符串",
          "syntax": "GET_FORMAT()",
          "originExample": "SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取小时",
          "syntax": "HOUR()",
          "originExample": "SELECT HOUR('10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "本地时间，同NOW()",
          "syntax": "LOCALTIME()/LOCALTIMESTAMP()",
          "originExample": "SELECT LOCALTIME();\nSELECT LOCALTIMESTAMP();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从年份和年份中的某一天创建日期",
          "syntax": "MAKEDATE()",
          "originExample": "SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从小时、分钟、秒创建时间",
          "syntax": "MAKETIME()",
          "originExample": "SELECT MAKETIME(12,15,30);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数返回微秒",
          "syntax": "MICROSECOND()",
          "originExample": "SELECT MICROSECOND('12:00:00.123456');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数中返回分钟",
          "syntax": "MINUTE()",
          "originExample": "SELECT MINUTE('2008-02-03 10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "给期间添加特定的月数",
          "syntax": "PERIOD_ADD()",
          "originExample": "SELECT PERIOD_ADD(200801,2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从日期参数返回季度",
          "syntax": "QUARTER()",
          "originExample": "SELECT QUARTER('2008-04-01');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回秒数",
          "syntax": "SECOND()",
          "originExample": "SELECT SECOND('10:05:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "使用三个参数调用时 DATE_SUB（） 的同义词",
          "syntax": "SUBDATE()",
          "originExample": "SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "减去时间",
          "syntax": "SUBTIME()",
          "originExample": "SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取传递的表达式的时间部分",
          "syntax": "TIME()",
          "originExample": "SELECT TIME('2003-12-31 01:02:03');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "格式化为时间",
          "syntax": "TIME_FORMAT()",
          "originExample": "SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向日期时间表达式添加间隔",
          "syntax": "TIMESTAMPADD()",
          "originExample": "SELECT TIMESTAMPADD(MINUTE, 1, '2003-01-02');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期",
          "syntax": "UTC_DATE()",
          "originExample": "SELECT UTC_DATE(), UTC_DATE() + 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 时间",
          "syntax": "UTC_TIME()",
          "originExample": "SELECT UTC_TIME, UTC_TIME() + 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期和时间",
          "syntax": "UTC_TIMESTAMP()",
          "originExample": "SELECT UTC_TIMESTAMP, UTC_TIMESTAMP() + 0;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回周数",
          "syntax": "WEEK()",
          "originExample": "SELECT WEEK('2008-12-31',1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回工作日索引",
          "syntax": "WEEKDAY()",
          "originExample": "SELECT WEEKDAY('2008-02-03 22:23:00');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回年份和星期",
          "syntax": "YEARWEEK()",
          "originExample": "SELECT YEARWEEK('1987-01-01');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的二进制表示形式",
          "syntax": "BIN()",
          "originExample": "SELECT BIN(12);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，以便对于值位中设置的每个位，您 获取一个 ON 字符串，对于每个未设置的位，您都会得到一个 OFF 字符串",
          "syntax": "EXPORT_SET()",
          "originExample": "SELECT EXPORT_SET(5,'Y','N',',',4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回格式化为指定小数位数的数字",
          "syntax": "FORMAT()",
          "originExample": "SELECT FORMAT(12332.123456, 4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一组逗号分隔的字符串，这些字符串具有 位中的相应位集",
          "syntax": "MAKE_SET()",
          "originExample": "SELECT MAKE_SET(1,'a','b','c');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "REGEXP 的否定",
          "syntax": "NOT REGEXP",
          "originExample": "SELECT 'a' NOT REGEXP '^[a-d]';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP",
          "originExample": "SELECT 'a' REGEXP '^[a-d]';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "RLIKE",
          "originExample": "SELECT 'a' RLIKE '^[a-d]';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的八进制表示形式",
          "syntax": "OCT()",
          "originExample": "SELECT OCT(12);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数最左边字符的字符代码",
          "syntax": "ORD()",
          "originExample": "SELECT ORD('2');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转义参数以在 SQL 语句中使用",
          "syntax": "QUOTE()",
          "originExample": "SELECT QUOTE('Don\\'t!');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP_LIKE()",
          "originExample": "SELECT REGEXP_LIKE('CamelCase', 'CAMELCASE');",
          "regexp": "\\bREGEXP_LIKE\\s*\\(",
          "recommend": "注意openGauss中该函数用法有差异，也可使用正则表达式操作符 ~ ",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较soundex()值",
          "syntax": "SOUNDS LIKE",
          "originExample": "expr1 SOUNDS LIKE expr2\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从指定数量的 分隔符的出现次数",
          "syntax": "SUBSTRING_INDEX()",
          "originExample": "SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串的权重字符串",
          "syntax": "WEIGHT_STRING()",
          "originExample": "SELECT WEIGHT_STRING('ab'); ",
          "regexp": "\\bWEIGHT_STRING\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回设置的位数",
          "syntax": "BIT_COUNT()",
          "originExample": "SELECT BIT_COUNT(64);",
          "regexp": "\\bBIT_COUNT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算语句摘要哈希值",
          "syntax": "STATEMENT_DIGEST()",
          "originExample": "SELECT STATEMENT_DIGEST('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算规范化语句摘要",
          "syntax": "STATEMENT_DIGEST_TEXT()",
          "originExample": "SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST_TEXT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回压缩前字符串的长度",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "确定密码的强度",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "SELECT VALIDATE_PASSWORD_STRENGTH('weak');",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "重复执行表达式",
          "syntax": "BENCHMARK()",
          "originExample": "SELECT BENCHMARK(1000000,MD5('goodbye'));",
          "regexp": "\\bBENCHMARK\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的字符集",
          "syntax": "CHARSET()",
          "originExample": "SELECT CHARSET('abc');",
          "regexp": "\\bCHARSET\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则强制值",
          "syntax": "COERCIBILITY()",
          "originExample": "SELECT COERCIBILITY('abc');",
          "regexp": "\\bCOERCIBILITY\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则",
          "syntax": "COLLATION()",
          "originExample": "SELECT COLLATION('abc');",
          "regexp": "\\bCOLLATION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回连接的连接 ID（线程 ID）",
          "syntax": "CONNECTION_ID()",
          "originExample": "SELECT CONNECTION_ID();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前活动角色",
          "syntax": "CURRENT_ROLE()",
          "originExample": "SELECT CURRENT_ROLE();",
          "regexp": "\\bCURRENT_ROLE\\s*\\(",
          "recommend": "直接使用CURRENT_ROLE，不带括号",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FOUND_ROWS()",
          "originExample": "SELECT FOUND_ROWS();",
          "regexp": "\\bFOUND_ROWS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "ICU 库版本",
          "syntax": "ICU_VERSION()",
          "originExample": "select ICU_VERSION();",
          "regexp": "\\bICU_VERSION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表示内存角色子图的 GraphML 文档",
          "syntax": "ROLES_GRAPHML()",
          "originExample": "SELECT ROLES_GRAPHML();",
          "regexp": "\\bROLES_GRAPHML\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "更新的行数",
          "syntax": "ROW_COUNT()",
          "originExample": "SELECT ROW_COUNT();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回默认（当前）数据库名称",
          "syntax": "SCHEMA()",
          "originExample": "SELECT SCHEMA();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "客户端提供的用户名和主机名",
          "syntax": "SYSTEM_USER()",
          "originExample": "SELECT SYSTEM_USER();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeomCollection()",
          "originExample": "SELECT GeomCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeometryCollection()",
          "originExample": "SELECT GeometryCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 Point 值构造 LineString",
          "syntax": "LineString()",
          "originExample": "SELECT LineString(Point(2, 2), Point(3, 3));",
          "regexp": "\\bLineString\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何图形的 MBR 是否包含另一个几何图形的 MBR",
          "syntax": "MBRContains()",
          "originExample": "SELECT MBRContains(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRContains\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否被另一个MBR覆盖",
          "syntax": "MBRCoveredBy()",
          "originExample": "SELECT MBRCoveredby(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCoveredBy\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否覆盖另一个MBR",
          "syntax": "MBRCovers()",
          "originExample": "SELECT MBRCovers(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCovers\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否不相交",
          "syntax": "MBRDisjoint()",
          "originExample": "SELECT MBRDisjoint(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRDisjoint\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否相等",
          "syntax": "MBREquals()",
          "originExample": "SELECT MBREquals(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBREquals\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的 MBR 是否相交",
          "syntax": "MBRIntersects()",
          "originExample": "SELECT MBRIntersects(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRIntersects\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否重叠",
          "syntax": "MBROverlaps()",
          "originExample": "SELECT MBROverlaps(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBROverlaps\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两种几何形状的MBR是否接触",
          "syntax": "MBRTouches()",
          "originExample": "SELECT MBRTouches(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRTouches\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何形状的 MBR 是否在另一个几何形状的 MBR 范围内",
          "syntax": "MBRWithin()",
          "originExample": "SELECT MBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRWithin\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 LineString 值构造 MultiLineString",
          "syntax": "MultiLineString()",
          "originExample": "SELECT MultiLineString(\n    LineString(Point(2, 2), Point(3, 3)),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bMultiLineString\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从点值构造 MultiPoint",
          "syntax": "MultiPoint()",
          "originExample": "SELECT MultiPoint(\n    Point(1, 1),\n    Point(2, 2)\n);",
          "regexp": "\\bMultiPoint\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从多边形值构造 MultiPolygon",
          "syntax": "MultiPolygon()",
          "originExample": "SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';\nSELECT ST_Area(ST_GeomFromText(@mpoly));",
          "regexp": "\\bMultiPolygon\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将数据追加到 JSON 文档",
          "syntax": "JSON_ARRAY_APPEND()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入到 JSON 数组中",
          "syntax": "JSON_ARRAY_INSERT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档的最大深度",
          "syntax": "JSON_DEPTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中的键数组",
          "syntax": "JSON_KEYS()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON文档中的元素数",
          "syntax": "JSON_LENGTH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，替换重复键的值",
          "syntax": "JSON_MERGE_PATCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE_PRESERVE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较两个 JSON 文档，如果这些文档有任何 TRUE（1），则返回 TRUE （0） 键值对或数组元素相同，否则为 FALSE （<>）",
          "syntax": "JSON_OVERLAPS()",
          "originExample": "",
          "regexp": "\\bJSON_OVERLAPS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "引用 JSON 文档",
          "syntax": "JSON_QUOTE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;如果出现以下情况，则返回 TRUE/1 document 根据架构进行验证，如果没有，则为 FALSE/0",
          "syntax": "JSON_SCHEMA_VALID()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;以 JSON 格式返回报告 验证结果的格式，包括成功或失败，以及 失败原因",
          "syntax": "JSON_SCHEMA_VALIDATION_REPORT()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALIDATION_REPORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中值的路径",
          "syntax": "JSON_SEARCH()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 列值的二进制表示形式中的释放空间 以下部分更新",
          "syntax": "JSON_STORAGE_FREE()",
          "originExample": "",
          "regexp": "\\bJSON_STORAGE_FREE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "用于存储 JSON 文档的二进制表示形式的空间",
          "syntax": "JSON_STORAGE_SIZE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 值的类型",
          "syntax": "JSON_TYPE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "取消对 JSON 值的引用",
          "syntax": "JSON_UNQUOTE()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON值是否有效",
          "syntax": "JSON_VALID()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回总体标准差",
          "syntax": "STD()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表列的默认值",
          "syntax": "DEFAULT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将超级聚合 ROLLUP 行与常规行区分开来",
          "syntax": "GROUPING()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IP 地址的数值",
          "syntax": "INET_ATON()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IP 地址",
          "syntax": "INET_NTOA()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IPv6 地址的数值",
          "syntax": "INET6_ATON()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IPv6 地址",
          "syntax": "INET6_NTOA()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 兼容地址",
          "syntax": "IS_IPV4_COMPAT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 映射地址",
          "syntax": "IS_IPV4_MAPPED()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为有效的 UUID",
          "syntax": "IS_UUID()",
          "originExample": "",
          "regexp": "\\bIS_UUID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "睡眠几秒钟",
          "syntax": "SLEEP()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回整数值通用标识符",
          "syntax": "UUID_SHORT()",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "originExample": "SELECT\n/*+ JOIN_PREFIX(t2, t5@subq2, t4@subq1)\n    JOIN_ORDER(t4@subq1, t3)\n    JOIN_SUFFIX(t1) */\nCOUNT(*) FROM t1 JOIN t2 JOIN t3\n           WHERE t1.f1 IN (SELECT /*+ QB_NAME(subq1) */ f1 FROM t4)\n             AND t2.f1 IN (SELECT /*+ QB_NAME(subq2) */ f1 FROM t5);",
          "regexp": "/\\*+[^/]*?\\b(JOIN_PREFIX|JOIN_SUFFIX|JOIN_ORDER)\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "JOIN_FIXED_ORDER/STRAIGHT_JOIN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\b(JOIN_FIXED_ORDER|STRAIGHT_JOIN)\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bNO_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDER_INDEX, NO_ORDER_INDEX,FORCE INDEX",
          "originExample": "SELECT /*+ NO_ORDER_INDEX(t1 i_b,i_c) */ a,c\n    FROM t1\n    ORDER BY a;",
          "regexp": "/\\*+[^/]*?\\b(ORDER_INDEX|NO_ORDER_INDEX|FORCE\\s+INDEX)[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_MERGE",
          "originExample": "SELECT /*+ INDEX_MERGE(t1 f3, PRIMARY) */ f2 FROM t1\n  WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;",
          "regexp": "/\\*+[^/]*?\\bINDEX_MERGE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SKIP_SCAN, NO_SKIP_SCAN",
          "originExample": "SELECT /*+ SKIP_SCAN(t1 PRIMARY) */ f1, f2\n  FROM t1 WHERE f2 > 40;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "use_invisible_indexes=off",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bNO_BNL\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BNL/NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bBNL\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN, NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN(@subq1 FIRSTMATCH, LOOSESCAN) */ * FROM t2\n  WHERE t2.a IN (SELECT /*+ QB_NAME(subq1) */ a FROM t3);",
          "regexp": "/\\*+[^/]*?\\b(SEMIJOIN|NO_SEMIJOIN)\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE, NO_MERGE",
          "originExample": "SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;",
          "regexp": "/\\*+[^/]*?\\b(MERGE|NO_MERGE)[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "DERIVED_CONDITION_PUSHDOWN, NO_DERIVED_CONDITION_PUSHDOWN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\b(DERIVED_CONDITION_PUSHDOWN|NO_DERIVED_CONDITION_PUSHDOWN)[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SET_VAR(sql_log_bin = off)",
          "originExample": "SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;",
          "regexp": "/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_CACHE/SQL_NO_CACHE",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\bSQL_NO_CACHE\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_BIG_RESULT/SQL_SMALL_RESULT",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_BIG_RESULT|SQL_SMALL_RESULT)\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BKA, NO_BKA",
          "originExample": "SELECT /*+ NO_BKA(t1, t2) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\b(BKA|NO_BKA)[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GROUP_INDEX, NO_GROUP_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\b(GROUP_INDEX|NO_GROUP_INDEX)[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MAX_EXECUTION_TIME",
          "originExample": "SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …",
          "regexp": "/\\*+[^/]*?\\bMAX_EXECUTION_TIME[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MRR, NO_MRR",
          "originExample": "SELECT /*+ MRR(t1) */ * FROM t1 WHERE f2 <= 3 AND 3 <= f3;",
          "regexp": "/\\*+[^/]*?\\b(MRR|NO_MRR)[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_ICP",
          "originExample": "INSERT INTO t3(f1, f2, f3)\n  (SELECT /*+ NO_ICP(t2) */ t2.f1, t2.f2, t2.f3 FROM t1,t2\n   WHERE t1.f1=t2.f1 AND t2.f2 BETWEEN t1.f1\n   AND t1.f2 AND t2.f2 + 1 >= t1.f1 + 1);",
          "regexp": "/\\*+[^/]*?\\bNO_ICP[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_RANGE_OPTIMIZATION",
          "originExample": "SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1\n  FROM t3 WHERE f1 > 30 AND f1 < 33;",
          "regexp": "/\\*+[^/]*?\\bNO_RANGE_OPTIMIZATION[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESOURCE_GROUP",
          "originExample": "INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);",
          "regexp": "/\\*+[^/]*?\\bRESOURCE_GROUP[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "SET [SESSION | @@SESSION. | @@]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SET  {GLOBAL | @@GLOBAL.}",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "查询中的变量如select t.*,MOD(@x :=  COALESCE(@x, 0) +1, 100) from table",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "_rowid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看建表语句",
          "syntax": "show create table table_name",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show variables like",
          "originExample": "show variables like '%%'",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INGORE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "指定多个条件",
          "syntax": "DECLARE ... HANDLER",
          "originExample": "",
          "regexp": "\\bDECLARE\\s+(CONTINUE|EXIT|UNDO)\\s+HANDLER\\s+",
          "recommend": "不支持handler",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建一个预备语句",
          "syntax": "PREPARE ... FROM",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "执行一个预备语句（带参数）",
          "syntax": "EXECUTE ... USING",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "释放创建的预备语句",
          "syntax": "DROP PREPARE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT * FROM user u force index(idx_user_id_update_time) where u.id=100 order by u.update_time",
          "originExample": "select * from kids force index (idx);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "MySQL datetime 支持指定精度",
          "syntax": "datetime(6)",
          "originExample": "如： key1 datetime(6)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "sql_mode",
          "originExample": "SET GLOBAL sql_mode = 'modes';\nSET SESSION sql_mode = 'modes';\nSET sql_mode='NO_UNSIGNED_SUBTRACTION';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "zerofill",
          "originExample": "create table t_d(key1 int(4) zerofill);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "create event",
          "originExample": "CREATE EVENT IF NOT EXISTS e_test ON SCHEDULE EVERY 1 SECOND ON COMPLETION PRESERVE DO CALL e_test(); --------MySQL,隔一秒执行一次e_test",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "bigint(4)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "TDSQL-PostgreSQL": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "insert into person partition (p_12) (name, age, job) values ('Cart', 8, 'No');",
          "regexp": "INSERT\\s+INTO\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+PARTITION\\s*\\(",
          "recommend": "直接插入数据到父表或者指定分区表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES on duplicate",
          "originExample": "INSERT INTO person partition (p_50) (name, age, job) \nVALUES ('John', 30, 'Engineer')\nON DUPLICATE KEY UPDATE age = VALUES(age), job = VALUES(job);",
          "regexp": "INSERT\\s+INTO\\s+[\\s\\S]+?\\s+ON\\s+DUPLICATE\\s+KEY\\s+(UPDATE|IGNORE)\\s+",
          "recommend": "使用ON CONFLICT (col) DO UPDATE子句代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] SELECT ON DUPLICATE",
          "originExample": "INSERT INTO person PARTITION (p_20, p_50) (name, age)\nSELECT name, age\nFROM kids_1\nON DUPLICATE KEY UPDATE age = VALUES(age);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INTO student VALUES \n  ('Chun', 'SQL', 75), ('Chun', 'Tuning', 73)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "update person, pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "UPDATE\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(?:\\s+(AS\\s+)?\\w+)?(\\s*,\\s*(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(?:\\s+(AS\\s+)?\\w+)?)+\\s+SET",
          "recommend": "不支持同时更新多个表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "update person partition (p_50),pp set person.job = '222', pp.job = '222' where person.name='Wzy';",
          "regexp": "UPDATE\\s+[\\s\\S]+\\s+PARTITION\\s*\\(",
          "recommend": "直接操作父表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "update t1 left join t2 on t1.id = t2.id set t1.name = t2.name;",
          "originExample": "",
          "regexp": "update\\b[\\s\\S]+?\\b(left|right|inner|cross)\\s+join\\b[\\s\\S]+?\\bset",
          "recommend": "可尝试改成 UPDATE t1 set t1.name = (select ...) 语句",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "REPLACE INTO VALUES",
          "originExample": "REPLACE INTO person (name, age, job) VALUES ('John', 25, 'Nurse');",
          "regexp": "\\bREPLACE\\s+INTO\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "REPLACE INTO t1 SELECT * FROM",
          "originExample": "replace into person select * from pp;",
          "regexp": "",
          "recommend": "不支持，同上",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "delete from person partition (p_50) where name = 'Wzy';",
          "regexp": "DELETE\\s+FROM\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+PARTITION\\s*\\(",
          "recommend": "DELETE FROM时直接使用分区表名，放弃PARTITION",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2\nWHERE a1.id=a2.id;",
          "originExample": "delete from p1, p2 using person as p1 inner join pp as p2 where p1.name = p2.name;",
          "regexp": "delete\\s+from\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?(\\s*,\\s*(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?)*\\s+using\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?((inner|left|right|full)\\s+join\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?)+",
          "recommend": "使用子查询来删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "DELETE post FROM blog INNER JOIN post WHERE blog.id = post.blog_id;",
          "originExample": "delete pp from person inner join pp where person.name = pp.name;",
          "regexp": "delete\\s+(\\w+|\\`\\w+\\`)(\\s*,\\s*(\\w+|\\`\\w+\\`))*\\s+from\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?((inner|left|right|full)\\s+join\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+(as\\s+(\\w+|\\`\\w+\\`)\\s+)?)+",
          "recommend": "使用子查询来删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tbl_name",
          "originExample": "",
          "regexp": "\\bLOAD\\s+DATA\\s+(LOW_PRIORITY|CONCURRENT|LOCAL\\s+)?INFILE\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IMPORT TABLE FROM",
          "originExample": "",
          "regexp": "\\bIMPORT\\s+TABLE\\s+FROM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT DELAYED",
          "originExample": "",
          "regexp": "\\bINSERT\\s+DELAYED\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD XML",
          "originExample": "",
          "regexp": "\\bLOAD\\s+XML\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK INSTANCE FOR BACKUP",
          "originExample": "",
          "regexp": "\\bLOCK\\s+INSTANCE\\s+FOR\\s+BACKUP\\s*",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNLOCK INSTANCE",
          "originExample": "",
          "regexp": "\\bUNLOCK\\s+INSTANCE\\s*",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOCK TABLES / UNLOCK TABLES",
          "originExample": "",
          "regexp": "\\b(LOCK|UNLOCK)\\s+TABLES\\s*",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "XA",
          "originExample": "",
          "regexp": "\\bXA\\s+(START|BEGIN|END|PREPARE|COMMIT|ROLLBACK|RECOVER)\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [LIMIT {[offset,] row_count | row_count OFFSET offset}]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "SET MAX_EXECUTION_TIME = <timeout_in_milliseconds>;",
          "originExample": "SET MAX_EXECUTION_TIME = 30000;\nselect /*+ MAX_EXECUTION_TIME(30000) */ * from kids;",
          "regexp": "\\bSET\\s+MAX_EXECUTION_TIME\\b",
          "recommend": "使用SET statement_timeout = <timeout_in_milliseconds>;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update/LOCK IN SHARE MODE [NOWAIT]",
          "originExample": "select * from kids lock in share mode;",
          "regexp": "\\block\\s+in\\s+share\\s+mode",
          "recommend": "使用FOR READ ONLY",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= str_to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "select * from kids inner join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "select * from kids cross join kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name union select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "select * from kids left join (select * from kids_2) as kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "select * from kids where age = (select max(age)/10 from kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT name,age FROM kids WHERE (name,age) IN (SELECT name,age FROM kids_2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT name FROM kids WHERE EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT name FROM kids WHERE NOT EXISTS (SELECT * FROM kids_2 WHERE kids.name = kids_2.name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "select AVG(kids_age) from (select SUM(age) as kids_age from kids group by name) as k;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "SELECT column1, column2, ...\nFROM table1\nWHERE condition1\nINTERSECT\nSELECT column1, column2, ...\nFROM table2\nWHERE condition2;",
          "originExample": "select * from kids left join kids_2 on kids.name = kids_2.name intersect select * from kids right join kids_2 on kids.name = kids_2.name;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "select * from kids union select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "select * from kids union all select * from kids_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "SELECT * FROM a\nEXCEPT\nSELECT * FROM b",
          "originExample": "select * from kids_2 except select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "WITH RECURSIVE ancestors AS \n ( SELECT * FROM kids\n   WHERE name='Jay'\n   UNION\n   SELECT c1.*\n   FROM kids AS c1, kids_2 AS c2\n   WHERE c1.name = c2.name OR c1.age = c2.age )\nSELECT * FROM ancestors;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "SELECT *\nFROM (\n  WITH cte AS (\n    SELECT column1, column2, ...\n    FROM table1\n    WHERE condition\n  )\n  SELECT *\n  FROM cte\n) AS dt",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "select * from kids where kids.name IN(with c2 as (select * from kids_2) select name from c2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "with k1 as (select * from kids),\nk2 as (select * from kids_2)\nselect * from k2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT HIGH_PRIORITY * FROM TABLE1",
          "originExample": "select high_priority * from child_1;",
          "regexp": "\\bhigh_priority\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "into_option: {\n    INTO OUTFILE 'file_name'\n        [CHARACTER SET charset_name]\n        export_options\n  | INTO DUMPFILE 'file_name'\n  | INTO var_name [, var_name] ",
          "originExample": "",
          "regexp": "\\binto\\s+(outfile|dumpfile|@\\w+)+",
          "recommend": "使用copy to 导出到文件",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STRAIGHT_JOIN",
          "originExample": "select * from t2 straight_join t1 on t2.a = t1.a;",
          "regexp": "\\bSTRAIGHT_JOIN\\b",
          "recommend": "使用其他join语句代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "information_schema库",
          "syntax": "information_schema",
          "originExample": "SELECT\n  TABLE_SCHEMA,\n  TABLE_NAME,\n  ENGINE,\n  TABLE_ROWS,\n  AVG_ROW_LENGTH,\n  INDEX_LENGTH\nFROM\n  information_schema.TABLES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "information_schema.STATISTICS",
          "originExample": "SELECT\n  *\nFROM\n  information_schema.STATISTICS;",
          "regexp": "\\binformation_schema\\.STATISTICS\\b",
          "recommend": "information_schema库下不存在STATISTICS表",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "create index idx on test(name);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name SELECT",
          "originExample": "create table kids_1 select * from kids;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table LIKE old_table_name",
          "originExample": "create table kids_3 like kids_2;",
          "regexp": "create\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+like",
          "recommend": "使用CREATE TABLE …AS SELECT * FROM …",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE sales1 (\n      id INT AUTO_INCREMENT,\n      sale_date DATE,\n      product VARCHAR(50),\n      revenue DECIMAL(10, 2),\n      PRIMARY KEY (id, sale_date)\n) PARTITION BY RANGE COLUMNS(sale_date) (\n      PARTITION p2020 VALUES LESS THAN ('2021-01-01'),\n      PARTITION p2021 VALUES LESS THAN ('2022-01-01'),\n      PARTITION p2022 VALUES LESS THAN ('2023-01-01'),\n      PARTITION p2023 VALUES LESS THAN ('2024-01-01'),\n      PARTITION p2024 VALUES LESS THAN ('2025-01-01')\n);",
          "regexp": "\\bCREATE\\s+TABLE\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s*\\([\\s\\S]+?\\)\\s*PARTITION\\s+BY\\s+[\\s\\S]+?PARTITION\\s+(\\w+|\\`\\w+\\`)",
          "recommend": "创建分区表时不支持连同子表一起创建。请使用partition of创建子分区表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD COLUMN col_name column_definition",
          "originExample": "ALTER TABLE person2 ADD COLUMN birth varchar(50);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "alter table children add constraint id_pk primary key(id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": " alter table students drop constraint yy;",
          "originExample": "alter table children drop constraint id_pk;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "alter table person truncate partition p_12;",
          "regexp": "ALTER\\s+TABLE\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+TRUNCATE\\s+PARTITION",
          "recommend": "直接 TRUNCATE TABLE 表分区",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "alter table person add partition (partition p_110 values less than (110));",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+add\\s+partition\\s*\\(\\s*partition\\s+(\\w+|\\`\\w+\\`)",
          "recommend": "使用CREATE TABLE ... PARTITION OF … 添加新的分区表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t REMOVE PARTITIONING",
          "originExample": "alter table t remove partitioning;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+remove\\s+partitioning",
          "recommend": "使用ALTER TABLE … DETACH PARTITION…移除分区表，再将数据还原回父表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;",
          "originExample": "alter table person modify sex int;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+modify\\s+",
          "recommend": "使用alter table ... alter column ... type ...",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME TABLE a TO b\nALTER TABLE t RENAME TO t1",
          "originExample": "rename table test to t;",
          "regexp": "rename\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+to\\s+",
          "recommend": "使用ALTER TABLE … RENAME TO …",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX index_name ON tbl_name\nALTER TALBE DROP INDEX",
          "originExample": "drop index idx on test;",
          "regexp": "(alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+)?drop\\s+index\\s+",
          "recommend": "DROP INDEX [IF EXISTS] [<模式名>.]<索引名>;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "alter table person drop partition p_110;",
          "regexp": "alter\\s+table\\s+(?:\\w+|\\`\\w+\\`)(?:\\.(\\w+|\\`\\w+\\`))?\\s+drop\\s+partition\\s+",
          "recommend": "可直接DROP TABLE 分区表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER EVENT",
          "originExample": "",
          "regexp": "\\bALTER\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER INSTANCE",
          "originExample": "",
          "regexp": "\\bALTER\\s+INSTANCE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bALTER\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SERVER",
          "originExample": "",
          "regexp": "\\bALTER\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE EVENT",
          "originExample": "",
          "regexp": "\\bCREATE\\s+(DEFINER\\s*=\\s*.+?\\s+)?EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE FUNCTION",
          "originExample": "",
          "regexp": "\\bCREATE\\s+AGGREGATE\\s+FUNCTION\\s+",
          "recommend": "不支持AGGREGATE关键字",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bCREATE\\s+LOGFILE\\s+GROUP\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE PROCEDURE",
          "originExample": "",
          "regexp": "CREATE\\s+DEFINER\\s*=\\s*.+?\\s+PROCEDURE\\s+",
          "recommend": "不支持DEFINER",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SERVER",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bCREATE\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CREATE TRIGGER",
          "originExample": "",
          "regexp": "\\bCREATE\\s+(DEFINER\\s*=\\s*.+?\\s+)?TRIGGER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP EVENT",
          "originExample": "",
          "regexp": "\\bDROP\\s+EVENT\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP FUNCTION",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP LOGFILE GROUP",
          "originExample": "",
          "regexp": "\\bDROP\\s+LOGFILE\\s+GROUP",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP PROCEDURE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SERVER",
          "originExample": "",
          "regexp": "\\bDROP\\s+SERVER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP SPATIAL REFERENCE SYSTEM",
          "originExample": "",
          "regexp": "\\bDROP\\s+SPATIAL\\s+REFERENCE\\s+SYSTEM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DROP TRIGGER",
          "originExample": "",
          "regexp": "\\bDROP\\s+TRIGGER\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS()",
          "originExample": "select abs(-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BIT_AND",
          "originExample": "SELECT BIT_AND(x)\nFROM (\n    SELECT 4 x\n    UNION\n    SELECT 5 x\n    UNION\n    SELECT 6 x\n) t;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL()",
          "originExample": "SELECT CEIL(2.132);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP()",
          "originExample": "SELECT EXP(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT FLOOR(1.23), FLOOR(-1.23);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(234, 10);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "SELECT POWER (2,-2);\nSELECT POW(2,-2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "RAND()",
          "originExample": "SELECT RAND();",
          "regexp": "\\bRAND\\s*\\(",
          "recommend": "使用RANDOM()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND()",
          "originExample": "SELECT ROUND(1.298, 0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "SELECT SIGN(-32);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "SELECT SQRT(4);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNCATE()",
          "originExample": "SELECT TRUNCATE(1.223,1);",
          "regexp": "\\bTRUNCATE\\s*\\(",
          "recommend": "使用TRUNC()代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null or\nx = ''",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHAR()",
          "originExample": "SELECT CHAR(123);",
          "regexp": "",
          "recommend": "不兼容但可能存在误扫，不扫描",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT()",
          "originExample": "SELECT CONCAT('123', '456');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT lower('AAA');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "SELECT LPAD('hi',4,'??');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "SELECT LTRIM('  barbar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "SELECT REPLACE('JACK and JUE','J','BL');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "SELECT RPAD('hi',5,'?');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('barbar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('Sakila' FROM -4 FOR 2);",
          "regexp": "\\bsubstr\\s*\\([^)]*\\s+(from|for)[^)]*\\)",
          "recommend": "不支持FOR、FROM，请使用SUBSTRING代替，或不使用FROM FOR关键字",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "SELECT TRIM('  bar   ');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "SELECT UPPER('Hej');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE",
          "originExample": "SELECT REVERSE('abc');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII()",
          "originExample": "SELECT ASCII('dx');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR()",
          "originExample": "SELECT INSTR('foobarbar', 'bar');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CHAR_LENGTH()",
          "originExample": "SELECT CHAR_LENGTH('dolphin');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR()",
          "originExample": "SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');",
          "regexp": "\\bREGEXP_INSTR\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_ADD('2008-01-02', INTERVAL 1 MONTH)\nDATE_SUB",
          "originExample": "SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURDATE()/CURRENT_DATE()",
          "originExample": "SELECT CURRENT_DATE();",
          "regexp": "\\b(CURRENT_DATE|CURDATE)\\s*\\(",
          "recommend": "使用CURRENT_DATE，不要带括号",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP()",
          "originExample": "SELECT CURRENT_TIMESTAMP();",
          "regexp": "\\bCURRENT_TIMESTAMP\\s*\\(",
          "recommend": "使用CURRENT_TIMESTAMP，不要带括号。\n或者使用NOW()函数。",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURTIME()/CURRENT_TIME()",
          "originExample": "SELECT CURRENT_TIME();",
          "regexp": "\\b(CURRENT_TIME|CURTIME)\\s*\\(",
          "recommend": "使用CURRENT_TIME，不要带括号",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT()",
          "originExample": "SELECT EXTRACT(YEAR FROM '2019-07-02');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY('2003-02-05');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "PERIOD_DIFF",
          "originExample": "SELECT PERIOD_DIFF(200802,200703);",
          "regexp": "\\bPERIOD_DIFF\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE(DATE_FORMAT(date,format))",
          "originExample": "SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');",
          "regexp": "\\bSTR_TO_DATE\\s*\\(",
          "recommend": "使用to_date函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NOW()\nSYSDATE()",
          "originExample": "SELECT SYSDATE(), NOW();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST('2020-12-12 12:12:12' AS DATETIME(秒后小数点位数))",
          "originExample": "SELECT CAST('2017-08-29 12:10:08.2235' AS DATETIME);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(34.0,3.0,5.0,767.0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "conv('101',2,10)",
          "originExample": "SELECT CONV('a',16,2);",
          "regexp": "\\bCONV\\s*\\(",
          "recommend": "不支持，需要自定义转换函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST()",
          "originExample": "SELECT CAST('100.5678' AS SIGNED);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SEC_TO_TIME()",
          "originExample": "SELECT SEC_TO_TIME(2378);",
          "regexp": "\\bSEC_TO_TIME\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DATE_FORMAT",
          "originExample": "SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %W');",
          "regexp": "\\bDATE_FORMAT\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STR_TO_DATE",
          "originExample": "",
          "regexp": "\\bSTR_TO_DATE\\s*\\(",
          "recommend": "使用TO_DATE",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IF",
          "originExample": "SELECT IF(1>2,2,3);",
          "regexp": "\\bIF\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "SELECT COALESCE(NULL,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(1,1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IFNULL",
          "originExample": "SELECT IFNULL(NULL,10);",
          "regexp": "\\bIFNULL\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UUID()",
          "originExample": "SELECT UUID();",
          "regexp": "\\bUUID\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_USER()\nUSER() ",
          "originExample": "SELECT USER();\nSELECT CURRENT_USER();",
          "regexp": "\\b(USER|CURRENT_USER)\\s*\\(",
          "recommend": "不要加括号",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "SELECT AVG(age) FROM PERSON;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM PERSON; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "CREATE TABLE scores (\n    name VARCHAR(20) PRIMARY KEY,\n    score INT NOT NULL\n);\n\nINSERT INTO\n scores(name, score)\nVALUES\n ('Smith',81),\n ('Jones',55),\n ('Williams',55),\n ('Taylor',62),\n ('Brown',62),\n ('Davies',84),\n ('Evans',87),\n ('Wilson',72),\n ('Thomas',72),\n ('Johnson',100); \n\nSELECT\n name,\n    score,\n    ROW_NUMBER() OVER (ORDER BY score) row_num,\n    CUME_DIST() OVER (ORDER BY score) cume_dist_val\nFROM\n scores; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "CREATE TABLE rankDemo (\n    val INT\n);\n \nINSERT INTO rankDemo(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    DENSE_RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "select MAX(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "select MIN(score) from scores;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "CREATE TABLE sales (\n  id INT AUTO_INCREMENT PRIMARY KEY,\n  product VARCHAR(50),\n  revenue DECIMAL(10, 2)\n);\n\nINSERT INTO sales (product, revenue)\nVALUES\n  ('Product A', 1000.00),\n  ('Product B', 1500.00),\n  ('Product C', 2000.00),\n  ('Product D', 2500.00),\n  ('Product E', 3000.00);\n\nSELECT\n  product,\n  revenue,\n  PERCENT_RANK() OVER (ORDER BY revenue)\nFROM sales;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "CREATE TABLE rankDemo2 (\n    val INT\n);\n \nINSERT INTO rankDemo2(val)\nVALUES(1),(2),(2),(3),(4),(4),(5);\n\nSELECT\n    val,\n    RANK() OVER (\n        ORDER BY val\n    ) my_rank\nFROM\n    rankDemo2; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": " SELECT STDDEV(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": " SELECT STDDEV_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": " SELECT STDDEV_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT sum(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(age) from person;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE()",
          "originExample": "SELECT\n*\nFROM\nJSON_TABLE(\n '[ {\"c1\": null} ]',\n'$[*]' COLUMNS( c1 INT PATH '$.c1' ERROR ON\nERROR )\n) AS jt;",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "使用jsonb_to_recordset",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE()",
          "originExample": "SELECT JSON_VALUE('{\"fname\": \"Joe\", \"lname\": \"Palmer\"}', '$.fname');",
          "regexp": "\\bJSON_VALUE\\s*\\(",
          "recommend": "使用jsonb_extract_path_text",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY()",
          "originExample": "SELECT JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME());",
          "regexp": "\\bJSON_ARRAY\\s*\\(",
          "recommend": "使用jsonb_build_array",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG()",
          "originExample": "select json_arrayagg(name) from person;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "使用jsonb_agg",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT()",
          "originExample": "SELECT JSON_OBJECT('id', 87, 'name', 'carrot');",
          "regexp": "\\bJSON_OBJECT\\s*\\(",
          "recommend": "使用jsonb_build_object",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG()",
          "originExample": "CREATE TABLE t_json(c VARCHAR(10), i INT);\n\nINSERT INTO t_json VALUES ('key', 3), ('key', 4), ('key', 5);\n\nSELECT JSON_OBJECTAGG(c, i) FROM t_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "使用jsonb_object_agg",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GROUP_CONCAT()",
          "originExample": "select group_concat(age) from person;",
          "regexp": "\\bGROUP_CONCAT\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE  ntileDemo (\n    val INT NOT NULL\n);\n \nINSERT INTO ntileDemo(val) \nVALUES(1),(2),(3),(4),(5),(6),(7),(8),(9);\n\nSELECT \n    val, \n    NTILE(4) OVER (\n        ORDER BY val\n    ) group_no\nFROM \n    ntileDemo; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "CREATE TABLE basic_pays(\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    salary INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n \nINSERT INTO \n basic_pays(employee_name, \n    department, \n    salary)\nVALUES\n ('Diane Murphy','Accounting',8435),\n ('Mary Patterson','Accounting',9998),\n ('Jeff Firrelli','Accounting',8992),\n ('William Patterson','Accounting',8870),\n ('Gerard Bondur','Accounting',11472),\n ('Anthony Bow','Accounting',6627),\n ('Leslie Jennings','IT',8113),\n ('Leslie Thompson','IT',5186),\n ('Julie Firrelli','Sales',9181),\n ('Steve Patterson','Sales',9441),\n ('Foon Yue Tseng','Sales',6660),\n ('George Vanauf','Sales',10563),\n ('Loui Bondur','SCM',10449),\n ('Gerard Hernandez','SCM',6949),\n ('Pamela Castillo','SCM',11303),\n ('Larry Bott','SCM',11798),\n ('Barry Jones','SCM',10586); \n\nSELECT\n    employee_name,\n    salary,\n    NTH_VALUE(employee_name, 2) OVER  (\n        ORDER BY salary DESC\n    ) second_highest_salary\nFROM\n    basic_pays; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE()",
          "originExample": "CREATE TABLE overtime (\n    employee_name VARCHAR(50) NOT NULL,\n    department VARCHAR(50) NOT NULL,\n    hours INT NOT NULL,\n    PRIMARY KEY (employee_name , department)\n);\n\nINSERT INTO overtime(employee_name, department, hours)\nVALUES('Diane Murphy','Accounting',37),\n('Mary Patterson','Accounting',74),\n('Jeff Firrelli','Accounting',40),\n('William Patterson','Finance',58),\n('Gerard Bondur','Finance',47),\n('Anthony Bow','Finance',66),\n('Leslie Jennings','IT',90),\n('Leslie Thompson','IT',88),\n('Julie Firrelli','Sales',81),\n('Steve Patterson','Sales',29),\n('Foon Yue Tseng','Sales',65),\n('George Vanauf','Marketing',89),\n('Loui Bondur','Marketing',49),\n('Gerard Hernandez','Marketing',66),\n('Pamela Castillo','SCM',96),\n('Larry Bott','SCM',100),\n('Barry Jones','SCM',65); \n\nSELECT\n    employee_name,\n    hours,\n    FIRST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "SELECT\n    employee_name,\n    LAG(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE()",
          "originExample": "SELECT\n    employee_name,\n    hours,\n    LAST_VALUE(employee_name) OVER (\n        ORDER BY hours\n    ) least_over_time\nFROM\n    overtime; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT\n    employee_name,\n    LEAD(salary, 1) OVER (\n        ORDER BY salary\n    ) least_over_time\nFROM\n    basic_pays;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "find_in_set",
          "originExample": "SELECT FIND_IN_SET('b','a,b,c,d');",
          "regexp": "\\bFIND_IN_SET\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "crc32",
          "originExample": "",
          "regexp": "\\bcrc32\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "仅日期部分相减",
          "syntax": "datediff",
          "originExample": "SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');",
          "regexp": "\\bDATEDIFF\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "\\bTO_BASE64\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FROM_BASE64",
          "originExample": "SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));",
          "regexp": "\\bFROM_BASE64\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "指定位置替换字符串,replace模式",
          "syntax": "insert",
          "originExample": "SELECT INSERT('Quadratic', 3, 4, 'What');",
          "regexp": "\\bINSERT\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "是否IPV4",
          "syntax": "IS_IPV4",
          "originExample": "",
          "regexp": "\\bIS_IPV4\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_IPV6",
          "originExample": "",
          "regexp": "\\bIS_IPV6\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "md5",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回从过去的日期开始的月份",
          "syntax": "month",
          "originExample": "SELECT MONTH('2008-02-03');",
          "regexp": "\\bmonth\\s*\\(",
          "recommend": "使用EXTRACT函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回月份的名称",
          "syntax": "MONTHNAME",
          "originExample": "SELECT MONTHNAME('2008-02-03');",
          "regexp": "\\bmonthname\\s*\\(",
          "recommend": "使用to_char函数，且转换前必须为date类型",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_INSERT_ID()",
          "originExample": "SELECT LAST_INSERT_ID();",
          "regexp": "\\bLAST_INSERT_ID\\s*\\(",
          "recommend": "使用LASTVAL()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONVERT()",
          "originExample": "",
          "regexp": "\\bCONVERT\\s*\\(",
          "recommend": "可以使用CAST函数或::操作符来实现数据类型转换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AES_DECRYPT()/AES_ENCRYPT()",
          "originExample": "",
          "regexp": "\\b(AES_DECRYPT|AES_ENCRYPT)\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNHEX()",
          "originExample": "",
          "regexp": "\\bUNHEX\\s*\\(",
          "recommend": "可以使用decode函数将十六进制字符串解码为二进制数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "HEX()",
          "originExample": "",
          "regexp": "\\bHEX\\s*\\(",
          "recommend": "可以使用encode函数将二进制数据编码为十六进制字符串",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LOAD_FILE()",
          "originExample": "",
          "regexp": "\\bLOAD_FILE\\s*\\(",
          "recommend": "可以使用外部表功能来实现类似的文件加载功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MATCH()",
          "originExample": "",
          "regexp": "\\bMATCH\\s*\\(",
          "recommend": "可以使用全文搜索索引来实现类似的全文搜索功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SOUNDEX()",
          "originExample": "",
          "regexp": "\\bSOUNDEX\\s*\\(",
          "recommend": "可以通过安装和使用phonetics扩展来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADDTIME()",
          "originExample": "",
          "regexp": "\\bADDTIME\\s*\\(",
          "recommend": "可以使用时间间隔运算符+来将时间和时间间隔相加",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYNAME()",
          "originExample": "",
          "regexp": "\\bDAYNAME\\s*\\(",
          "recommend": "可以使用to_char()函数和日期格式模板来获取日期对应的星期几名称",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFMONTH()",
          "originExample": "",
          "regexp": "\\bDAYOFMONTH\\s*\\(",
          "recommend": "可以使用EXTRACT()函数和适当的参数来获取日期的月份中的天数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DAYOFYEAR()",
          "originExample": "",
          "regexp": "\\bDAYOFYEAR\\s*\\(",
          "recommend": "可以使用EXTRACT()函数和适当的参数来获取日期在一年中的天数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ExtractValue()",
          "originExample": "",
          "regexp": "\\bExtractValue\\s*\\(",
          "recommend": "可以使用XML函数和XPath查询来处理XML数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UpdateXML()",
          "originExample": "",
          "regexp": "\\bUpdateXML\\s*\\(",
          "recommend": "可以使用XML函数和操作符来处理和更新XML数据",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANDOM_BYTES()",
          "originExample": "",
          "regexp": "\\bRANDOM_BYTES\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA1()",
          "originExample": "",
          "regexp": "\\bSHA1\\s*\\(",
          "recommend": "可以使用digest()函数和适当的哈希算法来计算字符串的哈希值",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA()",
          "originExample": "",
          "regexp": "\\bSHA\\s*\\(",
          "recommend": "可以使用digest()函数和适当的哈希算法来计算字符串的哈希值",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SHA2()",
          "originExample": "",
          "regexp": "\\bSHA2\\s*\\(",
          "recommend": "可以使用digest()函数和适当的哈希算法来计算字符串的哈希值",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "可以使用octet_length()函数来获取压缩数据解压缩后的字节长度",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "可以通过自定义密码策略和适当的方法来评估密码的强度",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GET_LOCK()",
          "originExample": "",
          "regexp": "\\bGET_LOCK\\s*\\(",
          "recommend": "可以使用数据库事务和行级锁来实现锁的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_FREE_LOCK()",
          "originExample": "",
          "regexp": "\\bIS_FREE_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "IS_USED_LOCK()",
          "originExample": "",
          "regexp": "\\bIS_USED_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现类似的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_ALL_LOCKS()",
          "originExample": "",
          "regexp": "\\bRELEASE_ALL_LOCKS\\s*\\(",
          "recommend": "可以通过执行COMMIT或ROLLBACK语句来释放当前会话中持有的所有锁",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RELEASE_LOCK()",
          "originExample": "",
          "regexp": "\\bRELEASE_LOCK\\s*\\(",
          "recommend": "可以通过创建自定义表或状态变量来实现释放指定锁的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MASTER_POS_WAIT()",
          "originExample": "",
          "regexp": "\\bMASTER_POS_WAIT\\s*\\(",
          "recommend": "可以通过配置逻辑复制和逻辑解码来实现等待指定二进制日志位置被复制的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NAME_CONST()",
          "originExample": "",
          "regexp": "\\bNAME_CONST\\s*\\(",
          "recommend": "可以使用SELECT语句和常量值来实现返回常量值的功能",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIT_XOR()",
          "originExample": "",
          "regexp": "\\bBIT_XOR\\b",
          "recommend": "可以使用位运算符^来执行按位异或操作",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期或日期时间表达式",
          "syntax": "TIMESTAMP()",
          "originExample": "",
          "regexp": "\\bTIMESTAMP\\s*\\(",
          "recommend": "可改成 cast 调用",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "整除 / 求余",
          "syntax": "DIV / MOD",
          "originExample": "select 9 div 2;\nselect 9 mod 2;",
          "regexp": "\\s+(DIV|MOD)\\s+",
          "recommend": "求整除数可使用 / 配合floor函数；求余可使用%或mod()函数；",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "安全等于运算符\n严格比较两个NULL值是否相等。",
          "syntax": "<=>",
          "originExample": "select null <=> null;",
          "regexp": "\\s*<=>\\s*",
          "recommend": "不支持<=>，可尝试使用is比较null",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "异或",
          "syntax": "xor",
          "originExample": "select 1 xor 0;",
          "regexp": "\\s+XOR\\s+",
          "recommend": "可尝试用case when代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "与",
          "syntax": "&&",
          "originExample": "select 1 && 1;",
          "regexp": "\\s+\\&\\&\\s+",
          "recommend": "不支持&&，尝试使用AND代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "判断一个值是否存在于集合（数组）中的操作符",
          "syntax": "MEMBER OF()",
          "originExample": "SELECT 17 MEMBER OF('[23, \"abc\", 17, \"ab\", 10]');",
          "regexp": "\\bMEMBER\\s+OF\\s*\\(",
          "recommend": "不支持member of()，请尝试使用LIKE或正则代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回两个参数的弧切线",
          "syntax": "ATAN(x,y)",
          "originExample": "SELECT ATAN(-2,2);",
          "regexp": "\\bATAN\\s*\\(\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*,\\s*(-)?(\\d|\\w)*?(\\([\\s\\S]*\\))?\\s*\\)",
          "recommend": "使用ATAN2()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将时间值（间隔）添加到日期值",
          "syntax": "ADDDATE()",
          "originExample": "SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "\\bADDDATE\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从一个时区转换到另一个时区",
          "syntax": "CONVERT_TZ()",
          "originExample": "SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');",
          "regexp": "\\bCONVERT_TZ\\s*\\(",
          "recommend": "不支持该函数，可尝试使用AT TIME ZONE转换时区",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "天数值转换为日期",
          "syntax": "FROM_DAYS()",
          "originExample": "SELECT FROM_DAYS(730669);",
          "regexp": "\\bFROM_DAYS\\s*\\(",
          "recommend": "不支持该函数，可尝试DATE '0001-01-01' + INTERVAL '737850 days'的方式",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回日期格式字符串",
          "syntax": "GET_FORMAT()",
          "originExample": "SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));",
          "regexp": "\\bGET_FORMAT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取小时",
          "syntax": "HOUR()",
          "originExample": "SELECT HOUR('10:05:03');",
          "regexp": "\\bHOUR\\s*\\(",
          "recommend": "可尝试EXTRACT(HOUR FROM TIME '09:45:30')方式",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "本地时间，同NOW()",
          "syntax": "LOCALTIME()/LOCALTIMESTAMP()",
          "originExample": "SELECT LOCALTIME();\nSELECT LOCALTIMESTAMP();",
          "regexp": "\\b(LOCALTIME|LOCALTIMESTAMP)\\s*\\(",
          "recommend": "可以使用NOW()函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从年份和年份中的某一天创建日期",
          "syntax": "MAKEDATE()",
          "originExample": "SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);",
          "regexp": "\\bMAKEDATE\\s*\\(",
          "recommend": "可以使用日期函数+运算实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从小时、分钟、秒创建时间",
          "syntax": "MAKETIME()",
          "originExample": "SELECT MAKETIME(12,15,30);",
          "regexp": "\\bMAKETIME\\s*\\(",
          "recommend": "可以直接使用时间字面量，或者make_time函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数返回微秒",
          "syntax": "MICROSECOND()",
          "originExample": "SELECT MICROSECOND('12:00:00.123456');",
          "regexp": "\\bMICROSECOND\\s*\\(",
          "recommend": "使用EXTRACT函数提取微秒",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从参数中返回分钟",
          "syntax": "MINUTE()",
          "originExample": "SELECT MINUTE('2008-02-03 10:05:03');",
          "regexp": "\\bMINUTE\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "给期间添加特定的月数",
          "syntax": "PERIOD_ADD()",
          "originExample": "SELECT PERIOD_ADD(200801,2);",
          "regexp": "\\bPERIOD_ADD\\s*\\(",
          "recommend": "使用日期和时间函数以及算术运算来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从日期参数返回季度",
          "syntax": "QUARTER()",
          "originExample": "SELECT QUARTER('2008-04-01');",
          "regexp": "\\bQUARTER\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回秒数",
          "syntax": "SECOND()",
          "originExample": "SELECT SECOND('10:05:03');",
          "regexp": "\\bSECOND\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "使用三个参数调用时 DATE_SUB（） 的同义词",
          "syntax": "SUBDATE()",
          "originExample": "SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);",
          "regexp": "\\bSUBDATE\\s*\\(",
          "recommend": "使用日期运算实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "减去时间",
          "syntax": "SUBTIME()",
          "originExample": "SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');",
          "regexp": "\\bSUBTIME\\s*\\(",
          "recommend": "使用日期运算实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "提取传递的表达式的时间部分",
          "syntax": "TIME()",
          "originExample": "SELECT TIME('2003-12-31 01:02:03');",
          "regexp": "\\bTIME\\s*\\(",
          "recommend": "使用CAST函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "格式化为时间",
          "syntax": "TIME_FORMAT()",
          "originExample": "SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');",
          "regexp": "\\bTIME_FORMAT\\s*\\(",
          "recommend": "可尝试使用TO_CHAR函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向日期时间表达式添加间隔",
          "syntax": "TIMESTAMPADD()",
          "originExample": "SELECT TIMESTAMPADD(MINUTE, 1, '2003-01-02');",
          "regexp": "\\bTIMESTAMPADD\\s*\\(",
          "recommend": "使用日期运算实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期",
          "syntax": "UTC_DATE()",
          "originExample": "SELECT UTC_DATE(), UTC_DATE() + 0;",
          "regexp": "\\bUTC_DATE\\b",
          "recommend": "使用CURRENT_DATE AT TIME ZONE 'UTC'代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 时间",
          "syntax": "UTC_TIME()",
          "originExample": "SELECT UTC_TIME, UTC_TIME() + 0;",
          "regexp": "\\bUTC_TIME\\b",
          "recommend": "使用日期和时间函数以及时区设置来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前 UTC 日期和时间",
          "syntax": "UTC_TIMESTAMP()",
          "originExample": "SELECT UTC_TIMESTAMP, UTC_TIMESTAMP() + 0;",
          "regexp": "\\bUTC_TIMESTAMP\\b",
          "recommend": "使用日期和时间函数以及时区设置来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回周数",
          "syntax": "WEEK()",
          "originExample": "SELECT WEEK('2008-12-31',1);",
          "regexp": "\\bWEEK\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回工作日索引",
          "syntax": "WEEKDAY()",
          "originExample": "SELECT WEEKDAY('2008-02-03 22:23:00');",
          "regexp": "\\bWEEKDAY\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回年份和星期",
          "syntax": "YEARWEEK()",
          "originExample": "SELECT YEARWEEK('1987-01-01');",
          "regexp": "\\bYEARWEEK\\s*\\(",
          "recommend": "使用EXTRACT函数提取",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的二进制表示形式",
          "syntax": "BIN()",
          "originExample": "SELECT BIN(12);",
          "regexp": "\\bBIN\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，以便对于值位中设置的每个位，您 获取一个 ON 字符串，对于每个未设置的位，您都会得到一个 OFF 字符串",
          "syntax": "EXPORT_SET()",
          "originExample": "SELECT EXPORT_SET(5,'Y','N',',',4);",
          "regexp": "\\bEXPORT_SET\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回格式化为指定小数位数的数字",
          "syntax": "FORMAT()",
          "originExample": "SELECT FORMAT(12332.123456, 4);",
          "regexp": "\\bFORMAT\\s*\\(",
          "recommend": "可尝试使用TO_CHAR函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一组逗号分隔的字符串，这些字符串具有 位中的相应位集",
          "syntax": "MAKE_SET()",
          "originExample": "SELECT MAKE_SET(1,'a','b','c');",
          "regexp": "\\bMAKE_SET\\s*\\(",
          "recommend": "使用位操作函数和条件表达式来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "REGEXP 的否定",
          "syntax": "NOT REGEXP",
          "originExample": "SELECT 'a' NOT REGEXP '^[a-d]';",
          "regexp": "\\bNOT\\s+REGEXP\\b",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP",
          "originExample": "SELECT 'a' REGEXP '^[a-d]';",
          "regexp": "\\s+REGEXP\\s+",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "RLIKE",
          "originExample": "SELECT 'a' RLIKE '^[a-d]';",
          "regexp": "\\s+RLIKE\\s+",
          "recommend": "使用正则表达式函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回一个字符串，其中包含数字的八进制表示形式",
          "syntax": "OCT()",
          "originExample": "SELECT OCT(12);",
          "regexp": "\\bOCT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数最左边字符的字符代码",
          "syntax": "ORD()",
          "originExample": "SELECT ORD('2');",
          "regexp": "\\bORD\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转义参数以在 SQL 语句中使用",
          "syntax": "QUOTE()",
          "originExample": "SELECT QUOTE('Don\\'t!');",
          "regexp": "\\bQUOTE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串是否与正则表达式匹配",
          "syntax": "REGEXP_LIKE()",
          "originExample": "SELECT REGEXP_LIKE('CamelCase', 'CAMELCASE');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较soundex()值",
          "syntax": "SOUNDS LIKE",
          "originExample": "expr1 SOUNDS LIKE expr2\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).",
          "regexp": "\\bSOUNDS\\s+LIKE\\b",
          "recommend": "不支持sounds like",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从指定数量的 分隔符的出现次数",
          "syntax": "SUBSTRING_INDEX()",
          "originExample": "SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);",
          "regexp": "\\bSUBSTRING_INDEX\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串的权重字符串",
          "syntax": "WEIGHT_STRING()",
          "originExample": "SELECT WEIGHT_STRING('ab'); ",
          "regexp": "\\bWEIGHT_STRING\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回设置的位数",
          "syntax": "BIT_COUNT()",
          "originExample": "SELECT BIT_COUNT(64);",
          "regexp": "\\bBIT_COUNT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算语句摘要哈希值",
          "syntax": "STATEMENT_DIGEST()",
          "originExample": "SELECT STATEMENT_DIGEST('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "计算规范化语句摘要",
          "syntax": "STATEMENT_DIGEST_TEXT()",
          "originExample": "SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM mytable WHERE cola = 10 AND colb = 20');",
          "regexp": "\\bSTATEMENT_DIGEST_TEXT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回压缩前字符串的长度",
          "syntax": "UNCOMPRESSED_LENGTH()",
          "originExample": "SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));",
          "regexp": "\\bUNCOMPRESSED_LENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "确定密码的强度",
          "syntax": "VALIDATE_PASSWORD_STRENGTH()",
          "originExample": "SELECT VALIDATE_PASSWORD_STRENGTH('weak');",
          "regexp": "\\bVALIDATE_PASSWORD_STRENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "重复执行表达式",
          "syntax": "BENCHMARK()",
          "originExample": "SELECT BENCHMARK(1000000,MD5('goodbye'));",
          "regexp": "\\bBENCHMARK\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的字符集",
          "syntax": "CHARSET()",
          "originExample": "SELECT CHARSET('abc');",
          "regexp": "\\bCHARSET\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则强制值",
          "syntax": "COERCIBILITY()",
          "originExample": "SELECT COERCIBILITY('abc');",
          "regexp": "\\bCOERCIBILITY\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回字符串参数的排序规则",
          "syntax": "COLLATION()",
          "originExample": "SELECT COLLATION('abc');",
          "regexp": "\\bCOLLATION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回连接的连接 ID（线程 ID）",
          "syntax": "CONNECTION_ID()",
          "originExample": "SELECT CONNECTION_ID();",
          "regexp": "\\bCONNECTION_ID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回当前活动角色",
          "syntax": "CURRENT_ROLE()",
          "originExample": "SELECT CURRENT_ROLE();",
          "regexp": "\\bCURRENT_ROLE\\s*\\(",
          "recommend": "直接使用CURRENT_ROLE，不带括号",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FOUND_ROWS()",
          "originExample": "SELECT FOUND_ROWS();",
          "regexp": "\\bFOUND_ROWS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "ICU 库版本",
          "syntax": "ICU_VERSION()",
          "originExample": "select ICU_VERSION();",
          "regexp": "\\bICU_VERSION\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表示内存角色子图的 GraphML 文档",
          "syntax": "ROLES_GRAPHML()",
          "originExample": "SELECT ROLES_GRAPHML();",
          "regexp": "\\bROLES_GRAPHML\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "更新的行数",
          "syntax": "ROW_COUNT()",
          "originExample": "SELECT ROW_COUNT();",
          "regexp": "\\bROW_COUNT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回默认（当前）数据库名称",
          "syntax": "SCHEMA()",
          "originExample": "SELECT SCHEMA();",
          "regexp": "\\bSCHEMA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "客户端提供的用户名和主机名",
          "syntax": "SYSTEM_USER()",
          "originExample": "SELECT SYSTEM_USER();",
          "regexp": "\\bSYSTEM_USER\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeomCollection()",
          "originExample": "SELECT GeomCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从几何图形构造几何图形集合",
          "syntax": "GeometryCollection()",
          "originExample": "SELECT GeometryCollection(\n    Point(1, 1),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bGeometryCollection\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 Point 值构造 LineString",
          "syntax": "LineString()",
          "originExample": "SELECT LineString(Point(2, 2), Point(3, 3));",
          "regexp": "\\bLineString\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何图形的 MBR 是否包含另一个几何图形的 MBR",
          "syntax": "MBRContains()",
          "originExample": "SELECT MBRContains(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRContains\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否被另一个MBR覆盖",
          "syntax": "MBRCoveredBy()",
          "originExample": "SELECT MBRCoveredby(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCoveredBy\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个MBR是否覆盖另一个MBR",
          "syntax": "MBRCovers()",
          "originExample": "SELECT MBRCovers(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRCovers\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否不相交",
          "syntax": "MBRDisjoint()",
          "originExample": "SELECT MBRDisjoint(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n),\nMBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRDisjoint\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否相等",
          "syntax": "MBREquals()",
          "originExample": "SELECT MBREquals(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBREquals\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的 MBR 是否相交",
          "syntax": "MBRIntersects()",
          "originExample": "SELECT MBRIntersects(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRIntersects\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个几何形状的MBR是否重叠",
          "syntax": "MBROverlaps()",
          "originExample": "SELECT MBROverlaps(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBROverlaps\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两种几何形状的MBR是否接触",
          "syntax": "MBRTouches()",
          "originExample": "SELECT MBRTouches(\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),\n\tST_GeomFromText('Point(1 1)')\n);",
          "regexp": "\\bMBRTouches\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "一个几何形状的 MBR 是否在另一个几何形状的 MBR 范围内",
          "syntax": "MBRWithin()",
          "originExample": "SELECT MBRWithin(\n\tST_GeomFromText('Point(1 1)'),\n\tST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))')\n);",
          "regexp": "\\bMBRWithin\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从 LineString 值构造 MultiLineString",
          "syntax": "MultiLineString()",
          "originExample": "SELECT MultiLineString(\n    LineString(Point(2, 2), Point(3, 3)),\n    LineString(Point(2, 2), Point(3, 3))\n);",
          "regexp": "\\bMultiLineString\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从点值构造 MultiPoint",
          "syntax": "MultiPoint()",
          "originExample": "SELECT MultiPoint(\n    Point(1, 1),\n    Point(2, 2)\n);",
          "regexp": "\\bMultiPoint\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从多边形值构造 MultiPolygon",
          "syntax": "MultiPolygon()",
          "originExample": "SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';\nSELECT ST_Area(ST_GeomFromText(@mpoly));",
          "regexp": "\\bMultiPolygon\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将数据追加到 JSON 文档",
          "syntax": "JSON_ARRAY_APPEND()",
          "originExample": "",
          "regexp": "\\bJSON_ARRAY_APPEND\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入到 JSON 数组中",
          "syntax": "JSON_ARRAY_INSERT()",
          "originExample": "",
          "regexp": "\\bJSON_ARRAY_INSERT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档的最大深度",
          "syntax": "JSON_DEPTH()",
          "originExample": "",
          "regexp": "\\bJSON_DEPTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中的键数组",
          "syntax": "JSON_KEYS()",
          "originExample": "",
          "regexp": "\\bJSON_KEYS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON文档中的元素数",
          "syntax": "JSON_LENGTH()",
          "originExample": "",
          "regexp": "\\bJSON_LENGTH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE()",
          "originExample": "",
          "regexp": "\\bJSON_MERGE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，替换重复键的值",
          "syntax": "JSON_MERGE_PATCH()",
          "originExample": "",
          "regexp": "\\bJSON_MERGE_PATCH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并 JSON 文档，保留重复的键",
          "syntax": "JSON_MERGE_PRESERVE()",
          "originExample": "",
          "regexp": "\\bJSON_MERGE_PRESERVE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "比较两个 JSON 文档，如果这些文档有任何 TRUE（1），则返回 TRUE （0） 键值对或数组元素相同，否则为 FALSE （<>）",
          "syntax": "JSON_OVERLAPS()",
          "originExample": "",
          "regexp": "\\bJSON_OVERLAPS\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "引用 JSON 文档",
          "syntax": "JSON_QUOTE()",
          "originExample": "",
          "regexp": "\\bJSON_QUOTE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;如果出现以下情况，则返回 TRUE/1 document 根据架构进行验证，如果没有，则为 FALSE/0",
          "syntax": "JSON_SCHEMA_VALID()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "根据 JSON 模式验证 JSON 文档;以 JSON 格式返回报告 验证结果的格式，包括成功或失败，以及 失败原因",
          "syntax": "JSON_SCHEMA_VALIDATION_REPORT()",
          "originExample": "",
          "regexp": "\\bJSON_SCHEMA_VALIDATION_REPORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 文档中值的路径",
          "syntax": "JSON_SEARCH()",
          "originExample": "",
          "regexp": "\\bJSON_SEARCH\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 列值的二进制表示形式中的释放空间 以下部分更新",
          "syntax": "JSON_STORAGE_FREE()",
          "originExample": "",
          "regexp": "\\bJSON_STORAGE_FREE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "用于存储 JSON 文档的二进制表示形式的空间",
          "syntax": "JSON_STORAGE_SIZE()",
          "originExample": "",
          "regexp": "\\bJSON_STORAGE_SIZE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON 值的类型",
          "syntax": "JSON_TYPE()",
          "originExample": "",
          "regexp": "\\bJSON_TYPE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "取消对 JSON 值的引用",
          "syntax": "JSON_UNQUOTE()",
          "originExample": "",
          "regexp": "\\bJSON_UNQUOTE\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON值是否有效",
          "syntax": "JSON_VALID()",
          "originExample": "",
          "regexp": "\\bJSON_VALID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回总体标准差",
          "syntax": "STD()",
          "originExample": "",
          "regexp": "\\bSTD\\s*\\(",
          "recommend": "使用STDDEV代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回表列的默认值",
          "syntax": "DEFAULT()",
          "originExample": "",
          "regexp": "\\bDEFAULT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将超级聚合 ROLLUP 行与常规行区分开来",
          "syntax": "GROUPING()",
          "originExample": "",
          "regexp": "\\bGROUPING\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IP 地址的数值",
          "syntax": "INET_ATON()",
          "originExample": "",
          "regexp": "\\bINET_ATON\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IP 地址",
          "syntax": "INET_NTOA()",
          "originExample": "",
          "regexp": "\\bINET_NTOA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回 IPv6 地址的数值",
          "syntax": "INET6_ATON()",
          "originExample": "",
          "regexp": "\\bINET6_ATON\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "从数值返回 IPv6 地址",
          "syntax": "INET6_NTOA()",
          "originExample": "",
          "regexp": "\\bINET6_NTOA\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 兼容地址",
          "syntax": "IS_IPV4_COMPAT()",
          "originExample": "",
          "regexp": "\\bIS_IPV4_COMPAT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为 IPv4 映射地址",
          "syntax": "IS_IPV4_MAPPED()",
          "originExample": "",
          "regexp": "\\bIS_IPV4_MAPPED\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "参数是否为有效的 UUID",
          "syntax": "IS_UUID()",
          "originExample": "",
          "regexp": "\\bIS_UUID\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "睡眠几秒钟",
          "syntax": "SLEEP()",
          "originExample": "",
          "regexp": "\\bSLEEP\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回整数值通用标识符",
          "syntax": "UUID_SHORT()",
          "originExample": "",
          "regexp": "\\bUUID_SHORT\\s*\\(",
          "recommend": "不支持该函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "originExample": "SELECT\n/*+ JOIN_PREFIX(t2, t5@subq2, t4@subq1)\n    JOIN_ORDER(t4@subq1, t3)\n    JOIN_SUFFIX(t1) */\nCOUNT(*) FROM t1 JOIN t2 JOIN t3\n           WHERE t1.f1 IN (SELECT /*+ QB_NAME(subq1) */ f1 FROM t4)\n             AND t2.f1 IN (SELECT /*+ QB_NAME(subq2) */ f1 FROM t5);",
          "regexp": "/\\*+[^/]*?\\b(JOIN_PREFIX|JOIN_SUFFIX|JOIN_ORDER)\\b[^/]*?\\*/",
          "recommend": "使用Leading(table table[ table...]) ",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "JOIN_FIXED_ORDER/STRAIGHT_JOIN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bJOIN_FIXED_ORDER[^/]*?\\*/",
          "recommend": "使用Leading",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDER_INDEX, NO_ORDER_INDEX,FORCE INDEX",
          "originExample": "SELECT /*+ NO_ORDER_INDEX(t1 i_b,i_c) */ a,c\n    FROM t1\n    ORDER BY a;",
          "regexp": "/\\*+[^/]*?\\b(ORDER_INDEX|NO_ORDER_INDEX|FORCE\\s+INDEX)[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_MERGE",
          "originExample": "SELECT /*+ INDEX_MERGE(t1 f3, PRIMARY) */ f2 FROM t1\n  WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;",
          "regexp": "/\\*+[^/]*?\\bINDEX_MERGE[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SKIP_SCAN, NO_SKIP_SCAN",
          "originExample": "SELECT /*+ SKIP_SCAN(t1 PRIMARY) */ f1, f2\n  FROM t1 WHERE f2 > 40;",
          "regexp": "/\\*+[^/]*?\\b(skip_scan|no_skip_scan)+\\b[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "use_invisible_indexes=off",
          "originExample": "",
          "regexp": "\\buse_invisible_indexes\\b",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bNO_BNL\\b[^/]*?\\*/",
          "recommend": "使用HashJoin(table table[ table...]) use_hash(table table[ table...])或NestLoop(table table[ table...]) use_nl(table table[ table...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BNL/NO_BNL",
          "originExample": "SELECT /*+ NO_BNL() BKA(t1) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\bBNL\\b[^/]*?\\*/",
          "recommend": "使用HashJoin(table table[ table...]) use_hash(table table[ table...])或NestLoop(table table[ table...]) use_nl(table table[ table...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN, NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN(@subq1 FIRSTMATCH, LOOSESCAN) */ * FROM t2\n  WHERE t2.a IN (SELECT /*+ QB_NAME(subq1) */ a FROM t3);",
          "regexp": "/\\*+[^/]*?\\b(SEMIJOIN|NO_SEMIJOIN)[^/]*?\\*/",
          "recommend": "使用SEMI_GEN_CROSS/NO_SEMI_GEN_CROSS",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE, NO_MERGE",
          "originExample": "SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;",
          "regexp": "/\\*+[^/]*?\\b(MERGE|NO_MERGE)[^/]*?\\*/",
          "recommend": "使用MergeJoin(table[ table...]) use_merge(table[ table...])",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "DERIVED_CONDITION_PUSHDOWN, NO_DERIVED_CONDITION_PUSHDOWN",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bDERIVED_CONDITION_PUSHDOWN[^/]*?\\*/\n/\\*+[^/]*?\\bNO_DERIVED_CONDITION_PUSHDOWN[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SET_VAR(sql_log_bin = off)",
          "originExample": "SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;",
          "regexp": "/\\*+[^/]*?\\bSET_VAR[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_CACHE/SQL_NO_CACHE",
          "originExample": "select SQL_CACHE * from person;\nselect SQL_NO_CACHE * from person;",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_NO_CACHE|SQL_CACHE)\\b",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SQL_BIG_RESULT/SQL_SMALL_RESULT",
          "originExample": "select SQL_BIG_RESULT * from person;\nselect SQL_SMALL_RESULT * from person;",
          "regexp": "\\bselect\\s+[\\s\\S]*?\\b(SQL_BIG_RESULT|SQL_SMALL_RESULT)\\b",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BKA, NO_BKA",
          "originExample": "SELECT /*+ NO_BKA(t1, t2) */ t1.* FROM t1 INNER JOIN t2 INNER JOIN t3;",
          "regexp": "/\\*+[^/]*?\\b(BKA|NO_BKA)[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GROUP_INDEX, NO_GROUP_INDEX",
          "originExample": "",
          "regexp": "/\\*+[^/]*?\\bGROUP_INDEX[^/]*?\\*/\n/\\*+[^/]*?\\bNO_GROUP_INDEX[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MAX_EXECUTION_TIME",
          "originExample": "SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE …",
          "regexp": "/\\*+[^/]*?\\bMAX_EXECUTION_TIME[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MRR, NO_MRR",
          "originExample": "SELECT /*+ MRR(t1) */ * FROM t1 WHERE f2 <= 3 AND 3 <= f3;",
          "regexp": "/\\*+[^/]*?\\bMRR[^/]*?\\*/\n/\\*+[^/]*?\\bNO_MRR[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_ICP",
          "originExample": "INSERT INTO t3(f1, f2, f3)\n  (SELECT /*+ NO_ICP(t2) */ t2.f1, t2.f2, t2.f3 FROM t1,t2\n   WHERE t1.f1=t2.f1 AND t2.f2 BETWEEN t1.f1\n   AND t1.f2 AND t2.f2 + 1 >= t1.f1 + 1);",
          "regexp": "/\\*+[^/]*?\\bNO_ICP[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_RANGE_OPTIMIZATION",
          "originExample": "SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1\n  FROM t3 WHERE f1 > 30 AND f1 < 33;",
          "regexp": "/\\*+[^/]*?\\bNO_RANGE_OPTIMIZATION[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESOURCE_GROUP",
          "originExample": "INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);",
          "regexp": "/\\*+[^/]*?\\bRESOURCE_GROUP[^/]*?\\*/",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SELECT USE INDEX",
          "originExample": "EXPLAIN SELECT * FROM marks\nUSE INDEX(ind_mark) \nWHERE mark between 50 and 100;",
          "regexp": "\\bUSE\\s+INDEX\\b",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SELECT IGNORE INDEX",
          "originExample": "SELECT * FROM table1 IGNORE INDEX (col3_index) WHERE col1=1 AND col2=2 AND col3=3;",
          "regexp": "\\bIGNORE\\s+INDEX\\b",
          "recommend": "不支持该Hint",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "SET [SESSION | @@SESSION. | @@]",
          "originExample": "",
          "regexp": "\\bSET\\s+(@@SESSION\\.|@@(?!GLOBAL)+)",
          "recommend": "不支持@@SESSION. 和 @@",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SET  {GLOBAL | @@GLOBAL.}",
          "originExample": "",
          "regexp": "\\bSET\\s+@@GLOBAL",
          "recommend": "不支持@@GLOBAL",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "查询中的变量如select t.*,MOD(@x :=  COALESCE(@x, 0) +1, 100) from table",
          "originExample": "",
          "regexp": "(@[0-9a-zA-Z]+\\s*:=)",
          "recommend": "不支持@变量",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "_rowid",
          "originExample": "",
          "regexp": "\\b_rowid\\b",
          "recommend": "可使用rowid",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看建表语句",
          "syntax": "show create table table_name",
          "originExample": "",
          "regexp": "\\bshow\\s+create\\s+table\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show variables like",
          "originExample": "show variables like '%%'",
          "regexp": "\\bshow\\s+variables\\s+like\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT INGORE",
          "originExample": "",
          "regexp": "\\bINSERT\\s+IGNORE",
          "recommend": "使用MERGE INTO",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "指定多个条件",
          "syntax": "DECLARE ... HANDLER",
          "originExample": "",
          "regexp": "\\bDECLARE\\s+(CONTINUE|EXIT|UNDO)\\s+HANDLER\\s+",
          "recommend": "不支持handler",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建一个预备语句",
          "syntax": "PREPARE ... FROM",
          "originExample": "",
          "regexp": "\\bPREPARE\\s+(\\w+|\\`\\w+\\`)\\s+FROM\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "执行一个预备语句（带参数）",
          "syntax": "EXECUTE ... USING",
          "originExample": "",
          "regexp": "\\bEXECUTE\\s+(\\w+|\\`\\w+\\`)\\s+USING\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "释放创建的预备语句",
          "syntax": "DROP PREPARE",
          "originExample": "",
          "regexp": "\\bDROP\\s+PREPARE\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SELECT * FROM user u force index(idx_user_id_update_time) where u.id=100 order by u.update_time",
          "originExample": "select * from kids force index (idx);",
          "regexp": "\\bforce\\s+index",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "MySQL datetime 支持指定精度",
          "syntax": "datetime(6)",
          "originExample": "如： key1 datetime(6)",
          "regexp": "",
          "recommend": "不涉及",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "sql_mode",
          "originExample": "SET GLOBAL sql_mode = 'modes';\nSET SESSION sql_mode = 'modes';\nSET sql_mode='NO_UNSIGNED_SUBTRACTION';",
          "regexp": "\\bsql_mode\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "zerofill",
          "originExample": "create table t_d(key1 int(4) zerofill);",
          "regexp": "\\bzerofill\\b",
          "recommend": "不支持对字段指定此属性",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "create event",
          "originExample": "CREATE EVENT IF NOT EXISTS e_test ON SCHEDULE EVERY 1 SECOND ON COMPLETION PRESERVE DO CALL e_test(); --------MySQL,隔一秒执行一次e_test",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "bigint(4)",
          "originExample": "",
          "regexp": "\\bbigint\\s*\\(",
          "recommend": "bigint无需指定精度",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "表面、列名等",
          "syntax": "`xxx`",
          "originExample": "",
          "regexp": "\\`\\w+\\`",
          "recommend": "表名、列名等不支持 ` 反引号包裹",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ]
    }
  },
  "Oracle": {
    "LightDB-Oracle": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "(insert\\s+into|update|delete\\s+from)\\s+[A-Za-z_][A-Za-z0-9_]{0,300}\\s+PARTITION\\s*\\(",
          "recommend": "不支持分区操作，改成形如 insert into table values(id1),(id2)",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "delete\\s+from\\s+[\\s\\S]+\\busing\\b\\s+inner\\s+",
          "recommend": "可尝试使用DELETE FROM table1 t1 USING table2 t2\nWHERE t1.\"id\" = t2.\"id\";",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "\\b(LOAD DATA|sqlldr)\\b",
          "recommend": "走研发中心提供的大数据导入导出接口",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "\\bfrom\\s+tabs",
          "recommend": "不支持系统视图tabs，建议tabs换成USER_TABLES;\n视图返回内容存在差异，请检查后使用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "\\bFOR\\s+UPDATE\\s+(?:OF\\s+((\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*,?\\s*)*)?WAIT\\s+\\d+",
          "recommend": "尝试使用乐观、悲观锁定机制或重试机制实现类似效果",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]+?\\bfor\\s+update\\s+of\\s+",
          "recommend": "不支持of后列的锁定，建议去掉。计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "\\b(connect_by_isleaf)\\b\\s*(\\+|-|\\*|\\/|=)|(\\+|-|\\*|\\/|=)\\s*\\b(connect_by_isleaf)\\b",
          "recommend": "connect_by_isleaf只能作为伪列使用，不支持表达式使用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "改用WITH RECURSIVE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "\\bwith\\s+function\\b\n\\bwith\\s+procedure\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "\\bsearch\\s+(depth|breadth)\\s+first\\s+by ",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "with中使用分析，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "筛选分析功能，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b",
          "recommend": "可尝试使用join替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bAS\\s+INTO\\b",
          "recommend": "去掉AS，使用SELECT ... INTO ...",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "ALTER\\s+INDEX[\\s\\S]+(enable|disable)",
          "recommend": "可使用存储过程调用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "\\bcreate\\s+((unique|bitmap)\\s+)?index\\s+[\\s\\S]+?((\\btablespace\\b[\\s\\S]+?\\b(local|global)\\b)|(\\b(local|global)\\b[\\s\\S]+?\\btablespace\\b))",
          "recommend": "创建索引时不支持tablespace接local关键字。计划23.4版本支持。",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "\\bcreate\\s+((unique|bitmap)\\s+)?index\\s+[\\s\\S]+?global\\s+partition\\s+by\\s+hash\\s*\\(",
          "recommend": "可尝试逐个分区创建。计划24年支持。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "create\\s+table\\s+\\w+\\s+like",
          "recommend": "使用create table ... as select",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "\\bCREATE\\s+GLOBAL\\s+TEMPORARY\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")\\.(\\w+|\\\"\\w+\\\")",
          "recommend": "lightdb不支持在非public schema下创建全局临时表。计划23.4支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "\\bCREATE\\s+(?:OR\\s+REPLACE\\s+)?(?:(NO\\s+)?FORCE\\s+)?EDITIONABLE\\s+(?:EDITIONING\\s+)?VIEW",
          "recommend": "暂不支持EDITIONABLE，计划23.4版本支持",
          "isSupportUnisql": "Y",
          "level": "警告"
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "\\bALTER\\s+TABLE\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+ADD\\s+CONSTRAINTS",
          "recommend": "lightdb中不支持CONSTRAINTS关键字，请去掉尾部的S，使用ADD CONSTRAINT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "\\bALTER\\s+TABLE\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+ADD\\s+(?:CONSTRAINT|CONSTRAINTS)\\s+[\\s\\S]+?\\s+(DISABLE|ENABLE)",
          "recommend": "disable语法糖暂不支持，计划23.4支持；enable去掉即可；",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "ALTER\\s+TABLE\\s+\\w+\\s+TRUNCATE\\s+PARTITION\\s+\\w+\\s+update\\s+indexes",
          "recommend": "使用 truncate table ",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "使用ALTER TABLE talbe DETACH PARTITIION new_table ;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "ALTER\\s+TABLE[\\s\\S]{1,40}\\s+\\bDROP\\s+INDEX",
          "recommend": "使用drop index",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "\\bALTER\\s+TABLE\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+MODIFY\\s+PARTITION\\s+BY\\s+LIST",
          "recommend": "不支持修改普通表至list分区表，请尝试手动新建分区表再迁移数据",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "\\bSQRT\\(\\s*\\d+\\.\\s*\\d+\\s*(d|f)",
          "recommend": "去除数字后面的后缀",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "\\bchr\\s*\\(\\d+\\s+USING\\s+NCHAR_CS\\s*\\)",
          "recommend": "不支持USING NCHAR_CS",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "建议使用regexp_match函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "\\b(to_dsinterval)\\s*\\(",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "\\b(to_yminterval)\\s*\\(",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\b(scn_to_timestamp)\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\b(timestamp_to_scn)\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "\\bSYSTIMESTAMP\\s*\\(\\s*\\d\\s*\\)",
          "recommend": "不支持精度，计划23.4支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "\\bto_date\\s*\\((\\d{8}|\\'\\d{8}\\')\\s*,\\s*(\\'yyyy[\\W\\D\\S]mm[\\W\\D\\S]dd\\'|\\'yyyymm[\\W\\D\\S]dd\\'|\\'yyyy[\\W\\D\\S]mmdd\\')",
          "recommend": "TO_DATE函数不支持该日期模板格式，请调整为与日期参数一致的模板",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\b(to_nchar)\\s*\\(",
          "recommend": "可通过手动代码替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "LightDB中decode函数处理小数参数时逻辑不同，请将小数点后面无效的0去掉。\n以下正则会导致扫描卡住，暂不支持扫描\n\\bDECODE\\s*\\((?:(\\d+|\\w+(\\([\\s\\S]*?\\))?|\\'[\\s\\S]+?\\'|\\d+\\/\\d+)\\s*,?\\s*)*(\\d+\\.\\d*0\\s*,?\\s*)",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\s*\\(",
          "recommend": "查询配置表等",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_QUERY\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "\\bJSON_VALUE\\s*\\(",
          "recommend": "可尝试使用json_extract_path",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_ARRAY\\s*\\(",
          "recommend": "可尝试使用json_build_array",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "\\b(listagg)\\b\\s*\\([\\s\\S]+on\\s+overflow\\s+truncate",
          "recommend": "不支持ON OVERFLOW TRUNCATE，长度溢出会报错",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "\\bROWIDTOCHAR\\s*\\(",
          "recommend": "计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "\\b(empty_clob|empty_blob)\\s*\\(\\)",
          "recommend": "暂不支持，计划23.4支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "\\bkeep\\s*\\(",
          "recommend": "LightDB不支持，SQL执行会报错，需要根据业务情况分析如何改写",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\(",
          "recommend": "LightDB_oracle 暂不支持。计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "LightDB_oracle 暂不支持。计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bORDERED\\b[^/]*?\\*/",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "/\\*+[^/]*?\\bORDER_INDEX\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_ORDER_INDEX\\b[^/]*?\\*/\nforce index\nuse index\nignore index",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bINDEX_MERGE\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bBATCH_TABLE_ACCESS_BY_ROWID\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bNO_SEMIJOIN\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "/\\*+[^/]*?\\bMERGE\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bUNNEST\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/\n/\\*+[^/]*?\\bDERIVED_CONDITION_PUSHDOWN\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_DERIVED_CONDITION_PUSHDOWN\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPQ_DISTRIBUTE\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPX_JOIN_FILTER\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_NO_CACHE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_CACHE\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bSQL_BIG_RESULT\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_SMALL_RESULT\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "LightDB不支持此优化提示，会忽略此优化器提示，SQL执行不会报错，但是可能达不到预期的效果，需要业务进行评估",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "ALTER\\s+SESSION\nSET\\s+@@SESSION",
          "recommend": "23.4已支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "\\b(rownum)\\b\\s*(\\+|-|\\*|\\/)\n\\bupdate\\b.*?set\\s+.*?(\\+|\\-|\\*|\\/)\\s*rownum.*?where",
          "recommend": "rownum仅支持作为表达式右值；UPDATE语句中不支持使用rownum",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "使用case when代替，计划24版本支持该函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "\\bconnect_by_isleaf\\s+[\\s\\S]+?\\bconnect\\s+by\\s+(?:.*?\\s*=\\s*)?prior\\b",
          "recommend": "connect_by_isleaf与connect by prior组合使用时只支持简单的列a=列b的形式",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "connect\\s+by\\s+rownum",
          "recommend": "改用connect by level替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "\\butl_file\\b",
          "recommend": "服务端读写后续提供标准API",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "dblink-\\w{1,30}@\\w{1,30}",
          "recommend": "先同步，后查询；或使用跨库查询",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "\\bdbms_application_info",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "\\bshow\\s+parameter\\b",
          "recommend": "使用show %xxx%",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "\\boid\\b",
          "recommend": "oid并非固定，请谨慎使用。计划23.4版本优化",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "\\b(?:GET_PREFS|SET_(GLOBAL|DATABASE|SCHEMA|TABLE)_PREFS)\\s*\\(\\s*\\'CONCURRENT\\'",
          "recommend": "不支持CONCURRENT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bnclob\\b",
          "recommend": "专用特性，如需可以考虑存储过程或研发中心提供的mybatis插件",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "\\bCOLUMN_VALUE\\b",
          "recommend": "需手动改写 (SELECT xxx) AS COLUMN_VALUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBFILE\\b",
          "recommend": "专用特性，如需可以考虑VARCHAR的数据类型等",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bnumber\\s*\\(\\s*\\*",
          "recommend": "暂不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bANALYZE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ANALYZE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bARRAY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ARRAY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bAUTHORIZATION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "AUTHORIZATION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "BINARY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBOTH\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "BOTH是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCASE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CASE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCAST\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CAST是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCOLLATE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "COLLATE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCOLLATION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "COLLATION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCONNECT_BY_ROOT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CONNECT_BY_ROOT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCROSS\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CROSS是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_DATE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_DATE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_SCHEMA\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_SCHEMA是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_TIME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_TIME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_TIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_TIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_USER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_USER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDECLARE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DECLARE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDEFERRABLE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DEFERRABLE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDISTRIBUTED\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DISTRIBUTED是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEND\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "END是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEXCEPT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "EXCEPT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEXCLUDE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "EXCLUDE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFETCH\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FETCH是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFOLLOWING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FOLLOWING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bforeign\\s+(?!\\s*key\\b)",
          "recommend": "FOREIGN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFULL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FULL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bINITIALLY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "INITIALLY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bINNER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "INNER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bJOIN\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "JOIN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLATERAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LATERAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLEADING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LEADING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLEFT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LEFT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLIMIT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LIMIT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLOCALTIME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LOCALTIME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLOCALTIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LOCALTIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNATURAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "NATURAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNOCYCLE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "NOCYCLE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOFFSET\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OFFSET是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bONLY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ONLY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOUTER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OUTER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOVERLAPS\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OVERLAPS是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bPARTITION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "PARTITION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bPRECEDING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "PRECEDING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bprimary\\s+(?!\\s*key\\b)",
          "recommend": "PRIMARY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bREFERENCES\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "REFERENCES是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRETURNING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "RETURNING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRIGHT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "RIGHT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSOME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SOME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSYSTIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SYSTIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bTRAILING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "TRAILING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bUNBOUNDED\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "UNBOUNDED是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bUSING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "USING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bWHEN\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "WHEN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSERIAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SERIAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_DOUBLE\\b",
          "recommend": "建议使用DOUBLE PRECISION",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "建议使用REAL",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "\\bset\\s+define\\s+(on|off)\\b",
          "recommend": "业务修改",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "\\s*(>|!|<)\\s+=\\s*",
          "recommend": ">=，<=，!=中间空格删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "LightDB-MySQL": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "\\busing\\b\\s+inner\\b",
          "recommend": "可尝试使用DELETE FROM table1 t1 USING table2 t2\nWHERE t1.\"id\" = t2.\"id\";",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "\\bfrom\\s+tabs",
          "recommend": "不支持系统视图tabs，建议tabs换成USER_TABLES;\n视图返回内容存在差异，请检查后使用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "\\bmax_statement_time\\b",
          "recommend": "执行ALTER SYSTEM SET statement_timeout=10;并重载数据库",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "\\bFOR\\s+UPDATE\\s+(?:OF\\s+((\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*,?\\s*)*)?WAIT\\s+\\d+",
          "recommend": "尝试使用乐观、悲观锁定机制或重试机制实现类似效果",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "改用WITH RECURSIVE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "from\\b\\(\\s+with\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "\\bwith\\s+function\\b\n\\bwith\\s+procedure\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "\\bsearch\\s+(depth|breadth)\\s+first\\s+by ",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "with中使用分析，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "筛选分析功能，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b",
          "recommend": "可尝试使用join替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bAS\\s+INTO\\b",
          "recommend": "去掉AS，使用SELECT ... INTO ...",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "ALTER\\s+INDEX[\\s\\S]+(enable|disable)",
          "recommend": "可使用存储过程调用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "create\\s+table\\s+\\w+\\s+like",
          "recommend": "使用create table ... as select",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "ALTER\\s+TABLE[\\s\\S]{1,40}TRUNCATE\\s+PARTITION",
          "recommend": "使用 truncate table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "使用ALTER TABLE talbe DETACH PARTITIION new_table ;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "ALTER\\s+TABLE[\\s\\S]{1,40}\\s+\\bDROP\\s+INDEX",
          "recommend": "使用drop index",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "\\bALTER\\s+TABLE\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+MODIFY\\s+PARTITION\\s+BY\\s+LIST",
          "recommend": "不支持修改普通表至list分区表，请尝试手动新建分区表再迁移数据",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "\\b(bitand)\\b",
          "recommend": "尝试使用BIT_AND替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "\\bDBMS_RANDOM.RANDOM\\b",
          "recommend": "改用DBMS_RANDOM_VALUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "\\bREGEXP_SUBSTR\\b",
          "recommend": "建议使用regexp_match函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "\\bREGEXP_INSTR\\b",
          "recommend": "可使用oracle.regexp_instr函数来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "\\bADD_MONTHS\\b",
          "recommend": "可尝试使用oracle.ADD_MONTHS来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "\\bLAST_DAY\\b",
          "recommend": "可尝试oracle.LAST_DAY来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "\\bMONTHS_BETWEEN\\b",
          "recommend": "可尝试使用oracle.MONTHS_BETWEEN替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "\\bsysdate\\b",
          "recommend": "可使用now()函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "\\b(to_dsinterval)\\b",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "\\b(to_yminterval)\\b",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\b(BIN_TO_NUM|conv)\\b",
          "recommend": "可尝试使用oracle.BIN_TO_NUM",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "\\b(SEC_TO_TIME|NUMTODSINTERVAL|NUMTOYMINTERVAL)\\b",
          "recommend": "可使用sql替换，SELECT to_char( ($1|| ' seconds')::interval, 'HH24:MI:SS')",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "\\bNUMTOYMINTERVAL\\b",
          "recommend": "可使用oracle.NUMTOYMINTERVAL替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "\\b(to_clob)\\b",
          "recommend": "CLOB字段不推荐使用，能去除尽量去除。如果不紧急，可以等LightDB-23.3_mysql版本（2023.09.30）支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\b(to_nchar)\\b",
          "recommend": "可通过手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "\\bTO_YMINTERVAL\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "\\b(sys_connect_by_path)\\b",
          "recommend": "可使用CTE语法替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "\\b(SYS_CONTEXT)\\b",
          "recommend": "使用oracle.SYS_CONTEXT语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\s*\\(",
          "recommend": "查询配置表等",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "\\bMEDIAN\\b",
          "recommend": "可尝试使用percentile_disc函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_QUERY\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "\\bJSON_VALUE\\b",
          "recommend": "可尝试使用json_extract_path",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_ARRAY\\b",
          "recommend": "可尝试使用json_build_array",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "\\bLISTAGG\\b",
          "recommend": "可尝试使用oracle.LISTAGG",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "\\bkeep\\s*\\(",
          "recommend": "LightDB不支持，SQL执行会报错，需要根据业务情况分析如何改写",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\(",
          "recommend": "LightDB_oracle 暂不支持。计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "LightDB_oracle 暂不支持。计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "/\\*+[^/]*?\\bORDER_INDEX\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_ORDER_INDEX\\b[^/]*?\\*/\nforce index\nuse index\nignore index",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bINDEX_MERGE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bBATCH_TABLE_ACCESS_BY_ROWID\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bNO_SEMIJOIN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "/\\*+[^/]*?\\bMERGE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bUNNEST\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/\n/\\*+[^/]*?\\bDERIVED_CONDITION_PUSHDOWN\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_DERIVED_CONDITION_PUSHDOWN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPQ_DISTRIBUTE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPX_JOIN_FILTER\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_NO_CACHE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_CACHE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bSQL_BIG_RESULT\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_SMALL_RESULT\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "ALTER\\s+SESSION\nSET\\s+@@SESSION",
          "recommend": "23.4已支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "使用case when代替，后续提供标准库",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "\\bconnect by\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "\\(\\+\\)",
          "recommend": "使用SQL的LEFT JOIN/RIGHT JOIN",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "utl_file\nselect[\\s\\S]+into\\s+outfile\nselect[\\s\\S]+into\\s+dumpfile",
          "recommend": "服务端读写后续提+L10:AU10供标准API",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "dblink-\\w{1,30}@\\w{1,30}",
          "recommend": "先同步，后查询+AW11+AU11+AU11:AW35",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "jdbcType=CURSOR",
          "recommend": "拆分SQL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "\\browid\\b",
          "recommend": "使用单字段主键代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "\\bshow\\s+parameter\\b",
          "recommend": "使用show %xxx%",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "\\b(?:GET_PREFS|SET_(GLOBAL|DATABASE|SCHEMA|TABLE)_PREFS)\\s*\\(\\s*\\'CONCURRENT\\'",
          "recommend": "不支持CONCURRENT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "\\bCOLUMN_VALUE\\b",
          "recommend": "需手动改写 (SELECT xxx) AS COLUMN_VALUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bnumber\\s*\\(\\s*\\*",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bANALYZE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ANALYZE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bARRAY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ARRAY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bAUTHORIZATION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "AUTHORIZATION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "BINARY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBOTH\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "BOTH是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCASE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CASE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCAST\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CAST是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCOLLATE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "COLLATE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCOLLATION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "COLLATION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCONNECT_BY_ROOT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CONNECT_BY_ROOT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCROSS\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CROSS是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_DATE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_DATE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_SCHEMA\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_SCHEMA是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_TIME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_TIME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_TIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_TIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_USER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_USER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDECLARE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DECLARE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDEFERRABLE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DEFERRABLE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDISTRIBUTED\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DISTRIBUTED是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEND\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "END是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEXCEPT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "EXCEPT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEXCLUDE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "EXCLUDE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFETCH\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FETCH是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFOLLOWING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FOLLOWING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bforeign\\s+(?!\\s*key\\b)",
          "recommend": "FOREIGN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFULL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FULL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bINITIALLY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "INITIALLY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bINNER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "INNER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bJOIN\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "JOIN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLATERAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LATERAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLEADING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LEADING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLEFT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LEFT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLIMIT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LIMIT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLOCALTIME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LOCALTIME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLOCALTIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LOCALTIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNATURAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "NATURAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNOCYCLE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "NOCYCLE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOFFSET\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OFFSET是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bONLY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ONLY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOUTER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OUTER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOVERLAPS\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OVERLAPS是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bPARTITION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "PARTITION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bPRECEDING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "PRECEDING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bprimary\\s+(?!\\s*key\\b)",
          "recommend": "PRIMARY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bREFERENCES\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "REFERENCES是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRETURNING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "RETURNING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRIGHT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "RIGHT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSOME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SOME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSYSTIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SYSTIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bTRAILING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "TRAILING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bUNBOUNDED\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "UNBOUNDED是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bUSING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "USING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bWHEN\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "WHEN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSERIAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SERIAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRAW\\b",
          "recommend": "建议使用BIT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDATE\\b",
          "recommend": "建议使用TIMESTAMP",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_DOUBLE\\b",
          "recommend": "建议使用DOUBLE PRECISION",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "建议使用REAL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "\\s*(>|!|<)\\s+=\\s*",
          "recommend": ">=，<=，!=中间空格删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "LightDB-PostgreSQL": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "\\busing\\b\\s+inner\\b",
          "recommend": "可尝试使用DELETE FROM table1 t1 USING table2 t2\nWHERE t1.\"id\" = t2.\"id\";",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "\\bfrom\\s+dual\\b",
          "recommend": "可添加dual虚拟表，或者去除dual",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "\\bfrom\\s+tabs",
          "recommend": "不支持系统视图tabs，建议tabs换成USER_TABLES;\n视图返回内容存在差异，请检查后使用",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "\\bmax_statement_time\\b",
          "recommend": "执行ALTER SYSTEM SET statement_timeout=10;并重载数据库",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "\\bFOR\\s+UPDATE\\s+(?:OF\\s+((\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*,?\\s*)*)?WAIT\\s+\\d+",
          "recommend": "尝试使用乐观、悲观锁定机制或重试机制实现类似效果",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "改用WITH RECURSIVE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "from\\b\\(\\s+with\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "\\bwith\\s+function\\b\n\\bwith\\s+procedure\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "\\bsearch\\s+(depth|breadth)\\s+first\\s+by ",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "with中使用分析，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "筛选分析功能，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b",
          "recommend": "可尝试使用join替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "ALTER\\s+INDEX[\\s\\S]+(enable|disable)",
          "recommend": "可使用存储过程调用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "create\\s+table\\s+\\w+\\s+like",
          "recommend": "使用create table ... as select",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "ALTER\\s+TABLE[\\s\\S]{1,40}TRUNCATE\\s+PARTITION",
          "recommend": "使用 truncate table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "使用ALTER TABLE talbe DETACH PARTITIION new_table ;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "ALTER\\s+TABLE[\\s\\S]{1,40}\\s+\\bDROP\\s+INDEX",
          "recommend": "使用drop index",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "\\bALTER\\s+TABLE\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+MODIFY\\s+PARTITION\\s+BY\\s+LIST",
          "recommend": "不支持修改普通表至list分区表，请尝试手动新建分区表再迁移数据",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+PARTITION[\\s\\S]+\\b(update)\\b\\s+\\b(indexes)\\b\\s*\\(",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "\\b(bitand)\\b",
          "recommend": "尝试使用&替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "\\bDBMS_RANDOM.RANDOM\\b",
          "recommend": "改用DBMS_RANDOM.VALUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "\\bREGEXP_SUBSTR\\b",
          "recommend": "建议使用regexp_match函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "\\bstr\\b",
          "recommend": "可以尝试oracle.INSTR替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "\\bREGEXP_INSTR\\b",
          "recommend": "可使用oracle.regexp_instr函数来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "\\bADD_MONTHS\\b",
          "recommend": "可尝试使用oracle.ADD_MONTHS来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "\\bLAST_DAY\\b",
          "recommend": "可尝试oracle.LAST_DAY来实现",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "\\bMONTHS_BETWEEN\\b",
          "recommend": "可尝试使用oracle.MONTHS_BETWEEN替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "\\bsysdate\\b",
          "recommend": "可使用now()函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "\\b(to_dsinterval)\\b",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "\\b(to_yminterval)\\b",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\b(BIN_TO_NUM|conv)\\b",
          "recommend": "可尝试使用oracle.BIN_TO_NUM",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "\\b(SEC_TO_TIME|NUMTODSINTERVAL|NUMTOYMINTERVAL)\\b",
          "recommend": "可使用sql替换，SELECT to_char( ($1|| ' seconds')::interval, 'HH24:MI:SS')",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "\\bNUMTOYMINTERVAL\\b",
          "recommend": "可使用oracle.NUMTOYMINTERVAL替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\bSCN_TO_TIMESTAMP\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\bTIMESTAMP_TO_SCN\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\b(to_nchar)\\b",
          "recommend": "可通过手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "\\bTO_YMINTERVAL\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "\\b(sys_connect_by_path)\\b",
          "recommend": "可使用CTE语法替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "\\b(SYS_CONTEXT)\\b",
          "recommend": "使用oracle.SYS_CONTEXT语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\s*\\(",
          "recommend": "使用oracle.USERENV",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "\\bMEDIAN\\b",
          "recommend": "可尝试使用percentile_disc函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_QUERY\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "\\bJSON_VALUE\\b",
          "recommend": "可尝试使用json_extract_path",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_ARRAY\\b",
          "recommend": "可尝试使用json_build_array",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "\\bLISTAGG\\b",
          "recommend": "可尝试使用oracle.LISTAGG",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "\\bkeep\\s*\\(",
          "recommend": "可尝试sql替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\(",
          "recommend": "LightDB_oracle 暂不支持。计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "LightDB_oracle 暂不支持。计划23.4版本支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "/\\*+[^/]*?\\bORDER_INDEX\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_ORDER_INDEX\\b[^/]*?\\*/\nforce index\nuse index\nignore index",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bINDEX_MERGE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bBATCH_TABLE_ACCESS_BY_ROWID\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bNO_SEMIJOIN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "/\\*+[^/]*?\\bMERGE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bUNNEST\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/\n/\\*+[^/]*?\\bDERIVED_CONDITION_PUSHDOWN\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_DERIVED_CONDITION_PUSHDOWN\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSET_VAR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPQ_DISTRIBUTE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPX_JOIN_FILTER\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_NO_CACHE\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_CACHE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bSQL_BIG_RESULT\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSQL_SMALL_RESULT\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "ALTER\\s+SESSION\nSET\\s+@@SESSION",
          "recommend": "23.4已支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "使用case when代替，后续提供标准库",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "\\bconnect by\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "\\(\\+\\)",
          "recommend": "使用SQL的LEFT JOIN/RIGHT JOIN",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "utl_file\nselect[\\s\\S]+into\\s+outfile\nselect[\\s\\S]+into\\s+dumpfile",
          "recommend": "服务端读写后续提供标准API",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "dblink-\\w{1,30}@\\w{1,30}",
          "recommend": "先同步，后查询；或使用跨库查询",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "jdbcType=CURSOR",
          "recommend": "拆分SQL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "\\bshow\\s+parameter\\b",
          "recommend": "使用show %xxx%",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "\\b(?:GET_PREFS|SET_(GLOBAL|DATABASE|SCHEMA|TABLE)_PREFS)\\s*\\(\\s*\\'CONCURRENT\\'",
          "recommend": "不支持CONCURRENT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bnumber\\s*\\(\\s*\\*",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bANALYZE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ANALYZE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bARRAY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ARRAY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bAUTHORIZATION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "AUTHORIZATION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "BINARY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBOTH\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "BOTH是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCASE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CASE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCAST\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CAST是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCOLLATE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "COLLATE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCOLLATION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "COLLATION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCONNECT_BY_ROOT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CONNECT_BY_ROOT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCROSS\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CROSS是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_DATE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_DATE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_SCHEMA\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_SCHEMA是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_TIME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_TIME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_TIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_TIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCURRENT_USER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "CURRENT_USER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDECLARE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DECLARE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDEFERRABLE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DEFERRABLE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDISTRIBUTED\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "DISTRIBUTED是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEND\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "END是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEXCEPT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "EXCEPT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEXCLUDE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "EXCLUDE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFETCH\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FETCH是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFOLLOWING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FOLLOWING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bforeign\\s+(?!\\s*key\\b)",
          "recommend": "FOREIGN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bFULL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "FULL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bINITIALLY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "INITIALLY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bINNER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "INNER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bJOIN\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "JOIN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLATERAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LATERAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLEADING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LEADING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLEFT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LEFT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLIMIT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LIMIT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLOCALTIME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LOCALTIME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bLOCALTIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "LOCALTIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNATURAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "NATURAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNOCYCLE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "NOCYCLE是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOFFSET\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OFFSET是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bONLY\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "ONLY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOUTER\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OUTER是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bOVERLAPS\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "OVERLAPS是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bPARTITION\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "PARTITION是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bPRECEDING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "PRECEDING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bprimary\\s+(?!\\s*key\\b)",
          "recommend": "PRIMARY是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bREFERENCES\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "REFERENCES是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRETURNING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "RETURNING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRIGHT\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "RIGHT是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSOME\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SOME是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSYSTIMESTAMP\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SYSTIMESTAMP是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bTRAILING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "TRAILING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bUNBOUNDED\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "UNBOUNDED是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bUSING\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "USING是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bWHEN\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "WHEN是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bSERIAL\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "SERIAL是LightDB的关键字，不能作为列名，其余检测请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRAW\\b",
          "recommend": "建议使用BIT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bDATE\\b",
          "recommend": "建议使用TIMESTAMP",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_DOUBLE\\b",
          "recommend": "建议使用DOUBLE PRECISION",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "建议使用REAL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "openGauss": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "\\bdrop\\s+tablespace\\s+(\\w+|\\\"\\w+\\\")((\\s+(DROP|KEEP)\\s+QUOTA)|(\\s+\\bINCLUDING\\s+CONTENTS(\\s+(AND|KEEP)\\s+DATAFILES)?(\\s+CASCADE\\s+CONSTRAINTS)?))",
          "recommend": "不支持DROP/KEEP QUOTA，INCLUDING CONTENTS AND DATAFILES和CASCADE CONSTRAINTS，建议删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "\\bsqlldr\\s+[\\s\\S]*?(userid|control|log|bad|data|discard|discardmax|skip|load|errors|rows|bindsize|silent|direct|parfile|parallel|file|skip_unusable_indexes|skip_index_maintenance|commit_discontinued|readsize|external_table|columnarrayrows|streamsize|multithreading|resumable|resumable_name|resumable_timeout|date_cache|trim|DNFS_ENABLE|DNFS_READBUFFERS|EMPTY_LOBS_ARE_NULL|HELP)+",
          "recommend": "使用opengauss提供的相关工具",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "\\bfrom\\s+dual\\b",
          "recommend": "可添加dual虚拟表，或者去除dual",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "\\bfrom\\s+(tabs|col|user_tables|user_tab_cols)\\b",
          "recommend": "不支持系统视图tabs、col、USER_TABLES、user_tab_cols",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "\\bselect\\s+[\\s\\S]+?\\bfor\\s+update\\s+of\\s+",
          "recommend": "不支持of后列的锁定，openGauss中of后为table_name，意义不同",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "select * from t wehre id in '123';\nin 不带括号",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "\\bwith\\s+function\\b\n\\bwith\\s+procedure\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "\\bsearch\\s+(depth|breadth)\\s+first\\s+by ",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "建议通过子查询和窗口函数实现类似功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "筛选分析功能，需手动改写",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b",
          "recommend": "可使用连接子句或子查询改写，实现类似效果",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "\\balter\\s+index\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+\\b(enable|disable)",
          "recommend": "不支持ENABLE和DISABLE，请使用UNUSABLE和rebuild",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "\\b(create|alter)\\s+((unique|bitmap)\\s+)?index\\s+[\\s\\S]+?\\b(logging|nologging|compute\\s+statistics)\\b",
          "recommend": "不支持 nologging compute statistics关键字，建议删除。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "\\bcreate\\s+((unique|bitmap)\\s+)?index\\s+[\\s\\S]+?global\\s+partition\\s+by\\s+hash\\s*\\(",
          "recommend": "HASH索引目前仅限于行存表索引、临时表索引和分区表LOCAL索引，且不支持创建多字段索引。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "create\\s+private\\s+temporary\\s+table",
          "recommend": "不支持PRIVATE临时表，仅支持GLOBAL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "\\bCOALESCE\\s+(PARTITION|SUBPARTITION)\\b",
          "recommend": "不支持COALESCE PARTITION，通过创建新表、插入数据和重命名的方式来实现分区合并",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "\\bALTER\\s+TABLE\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+ADD\\s+(?:CONSTRAINT|CONSTRAINTS)\\s+[\\s\\S]+?\\s+(DISABLE|ENABLE)",
          "recommend": "约束不支持disable关键字；如果是enable，去掉即可；",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "\\busing\\s+index\\s+local",
          "recommend": "不支持using index local关键字，建议删除。",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "rename\\s+\\w+\\s+to\\s+",
          "recommend": "不支持RENAME ... TO ...; 请使用ALTER TABLE ... RENAME TO ...;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "\\bALTER\\s+TABLE\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+MODIFY\\s+PARTITION\\s+BY\\s+LIST",
          "recommend": "不支持修改普通表至list分区表，请尝试手动新建分区表再迁移数据",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "\\bcreate\\s+bitmap\\s+index\\s+",
          "recommend": "不支持BITMAP关键字",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "create\\s+((bigfile|smallfile)\\s+)?(((local\\s+)?temporary|undo)\\s+)?tablespace\\s+[\\s\\S]+?\\b((size\\s+\\d+(k|m|g|t|p|e)*)|logging|nologging|extent management|segment space management)",
          "recommend": "不兼容语法，请参考openGauss创建表空间的语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "\\b(DBMS_RANDOM\\.VALUE|DBMS_RANDOM\\.RANDOM)\\b",
          "recommend": "改用RANDOM()",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "\\b(MONTHS_BETWEEN)\\b",
          "recommend": "使用PERIOD_DIFF",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "\\bROUND\\s*\\((?!\\'?\\d+\\'?)",
          "recommend": "不支持ROUND(date)函数，请检查参数是否为date，如误扫请忽略",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "\\b(to_dsinterval)\\b",
          "recommend": "可尝试使用interval",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "\\b(to_yminterval)\\b",
          "recommend": "可尝试使用interval",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\b(BIN_TO_NUM)\\b",
          "recommend": "可使用conv函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "\\b(NUMTOYMINTERVAL)\\b",
          "recommend": "可使用to_date、INTERVAL 之类的函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\b(scn_to_timestamp)\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\b(timestamp_to_scn)\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\b(to_nchar)\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "\\b(TO_YMINTERVAL)\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "\\b(sys_connect_by_path)\\b",
          "recommend": "可使用CTE语法替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "\\b(SYS_CONTEXT)\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "\\bSYS_GUID\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "\\bDENSE_RANK\\s+FIRST\\s+ORDER\\s+BY\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "\\bDENSE_RANK\\s+LAST\\s+ORDER\\s+BY\\s+",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "\\bPERCENTILE_DISC\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_QUERY\\s*\\(",
          "recommend": "可以使用json_extract_path函数、->和->>操作符等来处理JSON数据类型，从中提取所需的值",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "可以使用jsonb_to_recordset函数和jsonb_populate_record函数等方法将JSON数据转换为关系型格式",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "\\bJSON_VALUE\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_ARRAY\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "可以使用jsonb_agg函数将行数据聚合为JSON数组",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECT\\s*\\(",
          "recommend": "在openGauss中入参有差别，请改写",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "可以使用jsonb_object_agg函数将键值对聚合为JSON对象",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "\\bROWIDTOCHAR\\s*\\(",
          "recommend": "不支持",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "\\b(empty_clob|empty_blob)\\s*\\(\\)",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "\\bkeep\\s*\\(",
          "recommend": "可以使用子查询和窗口函数的组合来实现类似的功能，以满足特定的需求",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bXMLPARSE\\s*\\(\\s*(CONTENT|DOCUMENT)\\b[\\s\\S]+?\\bWELLFORMED\\s*\\)",
          "recommend": "不支持WELLFORMED",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bgetclobval\\s*\\(\\)",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bORDERED\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_FFS\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bBATCH_TABLE_ACCESS_BY_ROWID\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bSWAP_JOIN_INPUTS\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bNO_SEMIJOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_MERGE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "/\\*+[^/]*?\\bMERGE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bUNNEST\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "/\\*+[^/]*?\\bORDERED_PREDICATES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPARALLEL\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPQ_DISTRIBUTE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPX_JOIN_FILTER\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "使用case when代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "\\butl_file\\.",
          "recommend": "可以使用COPY语句将查询结果导出到文件中",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "jdbcType=CURSOR",
          "recommend": "拆分SQL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "\\bdbms_application_info\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "\\b(?:GET_PREFS|SET_(GLOBAL|DATABASE|SCHEMA|TABLE)_PREFS)\\s*\\(\\s*\\'CONCURRENT\\'",
          "recommend": "不支持CONCURRENT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "\\bCOLUMN_VALUE\\b",
          "recommend": "需手动改写 (SELECT xxx) AS COLUMN_VALUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "PostgreSQL": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "(insert\\s+into|update|delete\\s+from)\\s+[A-Za-z_][A-Za-z0-9_]{0,300}\\s+PARTITION\\s*\\(",
          "recommend": "不支持分区操作，改成形如 insert into table values(id1),(id2)",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "insert\\s+all\\s+into",
          "recommend": "不支持insert all into，改成形如 insert into table values(id1),(id2)",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "delete\\s+from\\s+[\\s\\S]+\\busing\\b\\s+inner\\s+",
          "recommend": "可尝试使用DELETE FROM table1 t1 USING table2 t2\nWHERE t1.\"id\" = t2.\"id\";",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "\\b(LOAD DATA|sqlldr)\\b",
          "recommend": "走研发中心提供的大数据导入导出接口",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "\\bfrom\\s+dual\\b",
          "recommend": "可添加dual虚拟表，或者去除dual",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "\\blimit\\s+\\d+\\s*,\\s*\\d+",
          "recommend": "需添加offset偏移量，如limit 1 offset 100",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "\\bminus\\b",
          "recommend": "使用except替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "select * from t wehre id in '123';\nin 不带括号",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "\\bwith\\s+function\\b\n\\bwith\\s+procedure\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "\\bsearch\\s+(depth|breadth)\\s+first\\s+by ",
          "recommend": "手动代码替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "with中使用分析，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "筛选分析功能，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b\n\\bouter\\s+apply\\b",
          "recommend": "可尝试使用join替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bAS\\s+INTO\\b",
          "recommend": "去掉AS，使用SELECT ... INTO ...",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "ALTER\\s+INDEX[\\s\\S]+(enable|disable)",
          "recommend": "可使用存储过程调用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "ALTER\\s+TABLE[\\s\\S]{1,40}TRUNCATE\\s+PARTITION",
          "recommend": "使用 truncate table ",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "使用ALTER TABLE talbe DETACH PARTITIION new_table ;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "rename\\s+(?!table|column)[\\s\\S]{1,40}to",
          "recommend": "使用ALTER TABLE t1 RENAME TO t2",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "ALTER\\s+TABLE[\\s\\S]{1,40}\\s+\\bDROP\\s+INDEX",
          "recommend": "使用drop index",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "\\b(bitand)\\b",
          "recommend": "尝试使用&替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "\\b(DBMS_RANDOM\\.VALUE|DBMS_RANDOM\\.RANDOM)\\b",
          "recommend": "改用RANDOM()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "\\bSQRT\\(\\s*\\d+\\.\\s*\\d+\\s*(d|f)",
          "recommend": "去除数字后面的后缀",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "oracle的空和null是一样的，pg 不一致",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "\\bCHR\\s*\\(\\s*\\d+\\s+USING\\s+",
          "recommend": "函数CHR参数中不支持USING的用法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "\\bREGEXP_SUBSTR\\b",
          "recommend": "建议使用regexp_match函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "\\binstr\\b",
          "recommend": "可尝试使用strpos函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "\\bREGEXP_INSTR\\b",
          "recommend": "可使用position函数和substring函数来实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "\\b(ADD_MONTHS|DATE_SUB)\\b",
          "recommend": "可尝试使用interval等替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "\\bLAST_DAY\\b",
          "recommend": "可尝试使用sql替换，如SELECT (date_trunc('MONTH', now()) + INTERVAL '1 MONTH - 1 day')::date;",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "\\b(MONTHS_BETWEEN)\\b",
          "recommend": "可尝试使用sql替换，如  SELECT 12*EXTRACT(YEAR from age(now(),  '2020-12-31'))+EXTRACT(MONTH from age(now(),  '2020-12-31'));",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "\\bsysdate\\b",
          "recommend": "可使用now()函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "\\b(to_dsinterval)\\b",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "\\b(to_yminterval)\\b",
          "recommend": "可尝试使用interval，后续排期开发中",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "\\bTRUNC\\b",
          "recommend": "抽取日期，可使用date_trunc函数，否则忽略",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\b(BIN_TO_NUM)\\b",
          "recommend": "可使用PG的显示转化",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "\\b(NUMTODSINTERVAL|NUMTOYMINTERVAL)\\b",
          "recommend": "可使用sql替换，SELECT to_char( ($1|| ' seconds')::interval, 'HH24:MI:SS')",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\b(scn_to_timestamp)\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\b(timestamp_to_scn)\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "\\b(to_clob)\\b",
          "recommend": "数据类型中的不兼容，尝试替换数据类型",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\b(to_nchar)\\b",
          "recommend": "可通过手动代码替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "\\b(sys_connect_by_path)\\b",
          "recommend": "可使用CTE语法替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "\\bDECODE\\b",
          "recommend": "可尝试使用case、when语法替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "\\bnvl\\b",
          "recommend": "可尝试使用coalesce函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "\\b(SYS_CONTEXT)\\b",
          "recommend": "可查询pg配置表等",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "\\b(SYS_GUID)\\b",
          "recommend": "建议使用GEN_RANDOM_UUID()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\b",
          "recommend": "查询pg配置表等",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "\\b(CORR|COVAR_POP|COVAR_SAMP)\\b",
          "recommend": "表示表达式的相关系数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "\\bMEDIAN\\b",
          "recommend": "可尝试使用percentile_disc函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_QUERY\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "\\bJSON_VALUE\\b",
          "recommend": "可尝试使用json_extract_path",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_ARRAY\\b",
          "recommend": "可尝试使用json_build_array",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "\\b(LISTAGG)\\b",
          "recommend": "可尝试使用string_agg",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "\\bkeep\\s*\\(",
          "recommend": "不支持，SQL执行会报错，需要根据业务情况分析如何改写",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\(",
          "recommend": "pg不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "pg暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bgetclobval\\b",
          "recommend": "推荐使用lt-Oracle",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bORDERED\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "/\\*+[^/]*?\\bINDEX\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_FFS\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bBATCH_TABLE_ACCESS_BY_ROWID\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bSWAP_JOIN_INPUTS\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "暂无替换方案，使用/*+*/优化器提示无副作用",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_SEMIJOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_MERGE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "/\\*+[^/]*?\\bMERGE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bUNNEST\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "/\\*+[^/]*?\\bORDERED_PREDICATES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPARALLEL\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPQ_DISTRIBUTE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPX_JOIN_FILTER\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "ALTER\\s+SESSION",
          "recommend": "使用set session",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "SET\\s+GLOBAL",
          "recommend": "使用alter system/role/database set",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "",
          "recommend": "专用性能较佳，",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "使用case when代替，后续提供标准库",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "\\bconnect by\\b",
          "recommend": "不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "\\(\\+\\)",
          "recommend": "使用ANSI SQL的LEFT JOIN/RIGHT JOIN",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "使用left join union right join代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "\\butl_file\\b",
          "recommend": "服务端读写后续提供标准API",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "",
          "recommend": "先同步，后查询；或使用跨库查询",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "",
          "recommend": "拆分SQL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "\\b(rowid|urowid|rownum)\\b",
          "recommend": "使用单字段主键代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "\\bdbms_application_info",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "\\b(?:GET_PREFS|SET_(GLOBAL|DATABASE|SCHEMA|TABLE)_PREFS)\\s*\\(\\s*\\'CONCURRENT\\'",
          "recommend": "不支持CONCURRENT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCOMPRESSED\\b",
          "recommend": "专用特性，如需可以考虑存储过程或研发中心提供的mybatis插件",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNUMBER\\b",
          "recommend": "专用特性，如需可以考虑int、bigint、decimal的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBFILE\\b",
          "recommend": "专用特性，如需可以考虑VARCHAR的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "专用特性，如需可以考虑REAL的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_DOUBLE\\b",
          "recommend": "专用特性，如需可以考虑DOUBLE PRECISION的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBYTEA\\b",
          "recommend": "专用特性，如需可以考虑BYTEA的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bfloat\\b",
          "recommend": "专用特性，如需可以考虑DOUBLE PRECISION的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\b(LONG|LONG\\s+RAW)\\b",
          "recommend": "专用特性，如需可以考虑TEXT的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\braw\\s*\\(",
          "recommend": "专用特性，如需可以考虑bytea的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bREAL\\b",
          "recommend": "专用特性，如需可以考虑DOUBLE PRECISION的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bXMLTYPE\\b",
          "recommend": "专用特性，如需可以考虑XML的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bblob\\b",
          "recommend": "专用特性",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "(int|integer)\\s*\\(\\s*\\d+",
          "recommend": "直接改成int",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "\\s*(>|!|<)\\s+=\\s*",
          "recommend": ">=或者<=中间空格删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "OB-Oracle": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "select * from t wehre id in '123';\nin 不带括号",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\bWITH\\b[\\s\\S]+ANALYTIC[\\s]+VIEW[\\s]+AS\\s*([\\s\\S]+)\\s+\\bSELECT\\b",
          "recommend": "with中使用分析，暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bFILTER\\b[\\s\\S]+FACT\\s*\\([\\s\\S]+\\)",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "SELECT[\\s\\S]+FROM[\\s\\S]+\\bCROSS\\b\\s+\\bAPPLY\\b",
          "recommend": "可尝试使用join替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "ALTER\\s+INDEX[\\s\\S]+\\s+\\b(enable|disable)",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\bBIN_TO_NUM\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\bscn_to_timestamp\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\btimestamp_to_scn\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bSELECT\\s+USERENV\\b",
          "recommend": "可尝试使用SELECT SYS_CONTEXT('USERENV','LANGUAGE') FROM DUAL;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "\\b(CORR_S|CORR_K)\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_QUERY\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "\\bJSON_VALUE\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_ARRAY\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECT\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\([^)]*\\s+wellformed",
          "recommend": "ObOracle暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "ObOracle暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bgetclobval\\b",
          "recommend": "ObOracle暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_FFS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bSWAP_JOIN_INPUTS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN\\b[^/]*?\\*/\n/\\*+[^/]*?\\bNO_SEMIJOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "/\\*+[^/]*?\\bORDERED_PREDICATES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bMATERIALIZE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "\\bFULL\\s*OUTER\\s*JOIN",
          "recommend": "暂不支持,可尝试使用union",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "OB-MySQL": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "\\busing\\b\\s+inner\\b",
          "recommend": "可尝试使用DELETE FROM table1 t1 USING table2 t2\nWHERE t1.\"id\" = t2.\"id\";",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "\\bDELETE\\b\\s+\\bFROM\\b[\\s\\S]+\\bRETURNING\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "\\bINSERT\\b\\s+\\bINTO\\b[\\s\\S]+\\s+\\bWITH\\b[\\s\\S]+\\bAS\\b[\\s\\S]+\\([\\s\\S]+\\)\\s+\\bSELECT\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "\\bmax_statement_time\\b",
          "recommend": "global max_execution_time=-1;select ……",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "select * from t wehre id in '123';\nin 不带括号",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b",
          "recommend": "可尝试使用join替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "^\\s*rename\\s+(?!table)\\b[\\s\\S]+\\s+\\bto",
          "recommend": "rename后需要跟table关键词",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "^\\s*drop\\s+index\\s+(?!\\w+\\s+on\\s+\\w+)\\w+",
          "recommend": "可使用DROP INDEX index_name ON tbl_name|ALTER TALBE DROP INDEX",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": ""
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "\\b(bitand)\\b",
          "recommend": "尝试使用BIT_AND替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "\\bDBMS_RANDOM.RANDOM\\b",
          "recommend": "改用DBMS_RANDOM.VALUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "\\btrunc\\b",
          "recommend": "改用TRUNCATE函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "不兼容但可能存在误扫，不扫描",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "\\binitcap\\b",
          "recommend": "暂不支持，建议尝试使用自定义函数进行处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "\\bREGEXP_INSTR\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "\\bADD_MONTHS\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "\\b(PERIOD_DIFF|MONTHS_BETWEEN)\\b",
          "recommend": "暂不支持,可尝试使用TIMESTAMPDIFF",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "\\b(to_timestamp)\\b",
          "recommend": "可尝试使用STR_TO_DATE函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "(TO_DSINTERVAL|TO_YMINTERVAL)\\s*\\(.*\\)",
          "recommend": "可尝试使用date_add|date_diff",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "(TO_DSINTERVAL|TO_YMINTERVAL)\\s*\\(.*\\)",
          "recommend": "可尝试使用date_add|date_diff",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\bBIN_TO_NUM\\b",
          "recommend": "不兼容，尝试使用conv替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "\\bto_number\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "\\bNUMTODSINTERVAL\\b",
          "recommend": "可尝试使用SEC_TO_TIME()",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "\\bNUMTOYMINTERVAL\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\bscn_to_timestamp\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\bTIMESTAMP_TO_SCN\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "\\bto_char\\b",
          "recommend": "尝试使用DATE_FORMAT替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "\\bto_clob\\b",
          "recommend": "数据类型中的不兼容，尝试替换数据类型",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "\\bto_date\\b",
          "recommend": "尝试使用STR_TO_DATE替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\b(to_nchar)\\b",
          "recommend": "可通过手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "\\bSYS_CONNECT_BY_PATH\\b",
          "recommend": "暂不支持,可尝试自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "\\bsys_context\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "\\bsys_guid\\b",
          "recommend": "尝试使用uuid()替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\s*\\(",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "\\b(CORR|COVAR_POP|COVAR_SAMP)\\b",
          "recommend": "表示表达式的相关系数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "\\bcovar_pop\\b",
          "recommend": "尝试使用VAR_POP替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "\\bcovar_samp\\b",
          "recommend": "尝试使用VAR_SAMP替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "\\blast\\b",
          "recommend": "暂不支持,可尝试使用自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "\\bmedian\\b",
          "recommend": "暂不支持,可尝试使用自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "\\bPERCENTILE_CONT\\b",
          "recommend": "暂不支持,可尝试使用自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "\\bPERCENTILE_DISC\\b",
          "recommend": "暂不支持,可尝试使用自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bjson_query\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bjson_table\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "\\bLISTAGG\\b",
          "recommend": "可尝试使用GROUP_CONCAT()",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "\\bkeep\\s*\\(.*\\)",
          "recommend": "分析函数,暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\([^)]*\\s+wellformed",
          "recommend": "ObMysql暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "ObMysql暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "/\\*+[^/]*?\\bNO_INDEX\\b[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bBATCH_TABLE_ACCESS_BY_ROWID[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bSWAP_JOIN_INPUTS[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bNO_SEMIJOIN[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_MERGE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "/\\*+[^/]*?\\bMERGE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bUNNEST[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "/\\*+[^/]*?\\bORDERED_PREDICATES[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bQB_NAME[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPQ_DISTRIBUTE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPX_JOIN_FILTER[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bMATERIALIZE[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\b(APPEND_VALUES|SYS_DL_CURSOR)[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION[^/]*?\\*/",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "\\bROWNUM\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "\\bconnect by\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "\\(\\+\\)",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "\\bFULL\\s*OUTER\\s*JOIN",
          "recommend": "暂不支持,可尝试使用union",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "\\bUTL_FILE\\.",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "(\\bcreate\\s*database\\s*link|dblink)",
          "recommend": "暂不支持，可尝试使用FEDERATED引擎",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "\\b(rowid|urowid|rownum)\\b",
          "recommend": "暂不支持，rowid在oracle中是一个伪列，在ob-mysql中没有与之对应的伪列",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRAW\\b",
          "recommend": "建议使用BIT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_DOUBLE\\b",
          "recommend": "建议使用DOUBLE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCLOB\\b",
          "recommend": "建议使用TEXT ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "建议使用FLOAT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bVARCHAR2\\b",
          "recommend": "建议使用TINYTEXT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "DM8": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "<插入表达式>::=\n[@]INSERT  <single_insert_stmt> | <multi_insert_stmt>;\n\n<single_insert_stmt>::=[INTO] <full_tv_name> [<t_alias>] <insert_tail> [<return_into_obj>]\n<full_tv_name>::=\n    | <单表引用>  [@ <dblink_name>]\n    | [<模式名>.]<基表名>  INDEX <索引名>\n    | [<模式名>.]<基表名>  PARTITION (<分区名>)\n| <子查询表达式>\n<单表引用>::=[<模式名>.]<基表或视图名>\n<基表或视图名>::=<基表名>|<视图名>\n<子查询表达式>::=(<查询表达式>) [[AS] <表别名>]\n<t_alias>::=[AS] <表别名>\n<insert_tail>::= [(<列名>{,<列名>})]<insert_action>\n<insert_action>::= VALUES <ins_value> \n | <查询表达式>|(<查询表达式>)\n    | (<select_clause>)\n    | DEFAULT VALUES\n    | TABLE <full_tv_name>\n<return_into_obj>::=\n  <RETURN|RETURNING><expr{,expr}>INTO <data_item {,data_item }>\n |<RETURN|RETURNING><expr{,expr}>BULK COLLECT INTO <data_item {,data_item}>\n<select_clause> 参见第四章\n\n<multi_insert_stmt>::=ALL <multi_insert_into_list> <查询表达式>\n  |[ALL|FIRST]<multi_insert_into_condition_list> [<multi_insert_into_else>]<查询表达式>\n<multi_insert_into_list>::= <insert_into_single>{<insert_into_single>}\n<insert_into_single>::=\n INTO <full_tv_name> [<t_alias>] [(<列名>{,<列名>})][VALUES <ins_value>]\n<ins_value>::= \n (<expr>|DEFAULT {,<expr>|DEFAULT}){,(<expr>|DEFAULT {,<expr>|DEFAULT})}\n<multi_insert_into_condition_list> ::=\n<insert_into_single_condition>{,< insert_into_single_condition>}\n<insert_into_single_condition>::=\n WHEN <bool_exp> THEN <multi_insert_into_list>\n<multi_insert_into_else>::= ELSE <multi_insert_into_list>",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "UPDATE <更新列表> {<单列修改子句>|<多列修改子句>}\n<更新列表>::= <表引用>{,<表引用>}\n<单列修改子句>::= SET<列名>=<<值表达式>|DEFAULT>{,<列名>=<<值表达式>|DEFAULT>}[FROM <表引用>{,<表引用>}][WHERE <条件表达式>][<return_into_obj>];\n<多列修改子句>::= SET <列名>{,<列名>}= <subquery>;\n<表引用>::= 请参考第4章数据查询语句\n<return_into_obj>::=\n  <RETURN|RETURNING><列名>{,<列名>}INTO <结果对象>\n |<RETURN|RETURNING><列名>{,<列名>}BULK COLLECT INTO <结果对象>\n<结果对象>::= <数组>|<变量>",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "UPDATE <更新列表> {<单列修改子句>|<多列修改子句>}\n<更新列表>::= <表引用>{,<表引用>}\n<单列修改子句>::= SET<列名>=<<值表达式>|DEFAULT>{,<列名>=<<值表达式>|DEFAULT>}[FROM <表引用>{,<表引用>}][WHERE <条件表达式>][<return_into_obj>];\n<多列修改子句>::= SET <列名>{,<列名>}= <subquery>;\n<表引用>::= 请参考第4章数据查询语句\n<return_into_obj>::=\n  <RETURN|RETURNING><列名>{,<列名>}INTO <结果对象>\n |<RETURN|RETURNING><列名>{,<列名>}BULK COLLECT INTO <结果对象>\n<结果对象>::= <数组>|<变量>",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "DELETE  [FROM]  <表引用> \n[WHERE <条件表达式>][RETURN <列名>{,<列名>} INTO <结果对象>,{<结果对象>}];\n<表引用>::= [<模式名>.]{<基表或视图名> |<子查询表达式>}\n<基表或视图名>::= <基表名>|<视图名>\n<子查询表达式>::=(<查询表达式>) [[AS] <表别名> [<新生列>]]\n<结果对象>::=<数组>|<变量>",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "\\bdrop\\s+tablespace\\s+(\\w+|\\\"\\w+\\\")((\\s+(DROP|KEEP)\\s+QUOTA)|(\\s+\\bINCLUDING\\s+CONTENTS(\\s+(AND|KEEP)\\s+DATAFILES)?(\\s+CASCADE\\s+CONSTRAINTS)?))",
          "recommend": "不支持DROP/KEEP QUOTA，INCLUDING CONTENTS AND DATAFILES和CASCADE CONSTRAINTS，建议删除",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "DELETE  [FROM]  <表引用> \n[WHERE <条件表达式>][RETURN <列名>{,<列名>} INTO <结果对象>,{<结果对象>}];\n<表引用>::= [<模式名>.]{<基表或视图名> |<子查询表达式>}\n<基表或视图名>::= <基表名>|<视图名>\n<子查询表达式>::=(<查询表达式>) [[AS] <表别名> [<新生列>]]\n<结果对象>::=<数组>|<变量>",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "\\bsqlldr\\s+[\\s\\S]*?(userid|control|log|bad|data|discard|discardmax|skip|load|errors|rows|bindsize|silent|direct|parfile|parallel|file|skip_unusable_indexes|skip_index_maintenance|commit_discontinued|readsize|external_table|columnarrayrows|streamsize|multithreading|resumable|resumable_name|resumable_timeout|date_cache|trim|DNFS_ENABLE|DNFS_READBUFFERS|EMPTY_LOBS_ARE_NULL|HELP)+",
          "recommend": "使用DM的dmfldr工具",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "\\bfrom\\s+(tabs|col)\\b",
          "recommend": "不支持系统视图tabs，col，建议tabs换成USER_TABLES;\ncol换成user_tab_cols，视图返回内容存在差异，请检查后使用",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "select * from t wehre id in '123';\nin 不带括号",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "建议通过子查询和窗口函数实现类似功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "筛选分析功能，需手动改写",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b",
          "recommend": "可使用连接子句或子查询改写，实现类似效果",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "\\balter\\s+index\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+\\b(enable|disable)",
          "recommend": "DM8中不支持ENABLE和DISABLE，请使用UNUSABLE和rebuild",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "\\b(create|alter)\\s+((unique|bitmap)\\s+)?index\\s+[\\s\\S]+?\\b(logging|nologging|compute\\s+statistics)\\b",
          "recommend": "DM不支持 nologging compute statistics关键字，建议删除。",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "\\bcreate\\s+((unique|bitmap)\\s+)?index\\s+[\\s\\S]+?\\blocal\\b",
          "recommend": "dm不支持在创建索引使用local关键字，建议删除",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "create\\s+private\\s+temporary\\s+table",
          "recommend": "DM不支持PRIVATE临时表，仅支持GLOBAL",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "\\bCOALESCE\\s+(PARTITION|SUBPARTITION)\\b",
          "recommend": "不支持COALESCE PARTITION，通过创建新表、插入数据和重命名的方式来实现分区合并",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "\\busing\\s+index\\s+local",
          "recommend": "DM不支持using index local关键字，建议删除。",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "rename\\s+\\w+\\s+to\\s+",
          "recommend": "不支持RENAME ... TO ...; 请使用ALTER TABLE ... RENAME TO ...;",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "create\\s+((bigfile|smallfile)\\s+)?(((local\\s+)?temporary|undo)\\s+)?tablespace\\s+[\\s\\S]+?\\b((size\\s+\\d+(k|m|g|t|p|e)*)|logging|nologging|extent management|segment space management)",
          "recommend": "达梦create tablespace时size不支持指定单位，只需指定数值，默认为M，取值范围128~67108863。不支持[LOGGING | NOLOGGING]、extent management及segment space management子句。 ",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\bbin_to_num\\s*\\(",
          "recommend": "建议改写",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\bSCN_TO_TIMESTAMP\\s*\\(",
          "recommend": "DM不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\bTIMESTAMP_TO_SCN\\s*\\(",
          "recommend": "DM不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\bTO_NCHAR\\s*\\(",
          "recommend": "建议改写",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\s*\\(",
          "recommend": "建议改写",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "\\bPERCENTILE_CONT\\s*\\(",
          "recommend": "DM不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "\\bPERCENTILE_DISC\\s*\\(",
          "recommend": "DM不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "DM不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "\\bjson_object\\s*\\([^\\)]+?\\b(value|is)\\b[^\\)]+?\\)",
          "recommend": "参数语法不同，不支持VALUE/IS关键字，DM8中用法为(k1,v1,k2,v2,...)",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "DM不支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bORDERED\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "/\\*+[^/]*?\\bFULL\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_COMBINE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "/\\*+[^/]*?\\bINDEX_JOIN\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_FFS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bBATCH_TABLE_ACCESS_BY_ROWID\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bSWAP_JOIN_INPUTS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bNO_SEMIJOIN\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_MERGE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "/\\*+[^/]*?\\bMERGE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bUNNEST\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "/\\*+[^/]*?\\bORDERED_PREDICATES\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPQ_DISTRIBUTE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPX_JOIN_FILTER\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bMATERIALIZE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\b(APPEND_VALUES|SYS_DL_CURSOR)\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "\\bALTER\\s+SESSION\\s+SET\\s+(NLS_NUMERIC_CHARACTERS|NLS_LANGUAGE|TIME_ZONE)",
          "recommend": "不支持ALTER SESSION SET NLS_NUMERIC_CHARACTERS ，NLS_LANGUAGE，TIME_ZONE。\n其中NLS_LANGUAGE修改成NLS_DATE_LANGUAGE;\n时区修改达梦语法SET TIME ZONE 地区/'+9:00';",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "\\bALTER\\s+SYSTEM\\s+SET\\s+(PGA_AGGREGATE_TARGET|SGA_TARGET|LOG_ARCHIVE_DEST)",
          "recommend": "不支持PGA_AGGREGATE_TARGET，SGA_TARGET，LOG_ARCHIVE_DEST",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "(?:\\w+|\\\"\\w+\\\")\\s+(urowid|long\\s+raw)\\b",
          "recommend": "dm不支持数据类型long raw ,urowid",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "关键字",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bEXCHANGE\\s+(?:varchar|varchar2|nchar|nvarchar2|number|float|binary_float|binary_double|long|long\\s+raw|raw|date|timestamp|interval\\s+year|interval\\s+day|blob|clob|nclob|bfile|rowid|urowid|SDO_POINT_TYPE|SDO_ELEM_INFO_ARRAY|SDO_ORDINATE_ARRAY|(national\\s+)?(character|char)(\\s+varying)?|nchar\\s+varying|numeric|decimal|dec|integer|int|smallint|double\\s+precision|real|XMLTYPE)\\b",
          "recommend": "exchange在DM中为关键字，作为列名时需要双引号",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "TDMySQL8": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "\\bmerge\\s*into.*when\\s*",
          "recommend": "可尝试使用INSERT INTO...on duplicate",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "\\bDELETE\\b\\s+\\bFROM\\b[\\s\\S]+\\bRETURNING\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "\\bINSERT\\b\\s+\\bINTO\\b[\\s\\S]+\\bWITH\\b[\\s\\S]+\\bAS\\b[\\s\\S]+\\([\\s\\S]+\\)\\s+\\bSELECT\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "\\bselect.*minus.*select",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "select * from t wehre id in '123';\nin 不带括号",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "with中使用分析，暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b",
          "recommend": "可尝试使用join替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "^\\s*rename\\s+(?!table)\\b[\\s\\S]+\\s+\\bto",
          "recommend": "rename后需要跟table关键词",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "^\\s*drop index (?!\\w+\\s+on\\s+\\w+)\\w_+",
          "recommend": "可使用DROP INDEX index_name ON tbl_name|ALTER TALBE DROP INDEX",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "\\b(bitand)\\b",
          "recommend": "改为BIT_AND",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "\\b(DBMS_RANDOM\\.VALUE|DBMS_RANDOM\\.RANDOM)\\b",
          "recommend": "改为rand函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "\\btruncate\\s*\\(",
          "recommend": "改用TRUNCATE函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "不兼容但可能存在误扫，不扫描",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "\\binitcap\\s*\\(",
          "recommend": "暂不支持，建议尝试使用自定义函数进行处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "\\bltrim\\(.*\\,.*\\)",
          "recommend": "LTRIM(string1 [, set ])暂不支持，可尝试使用TRIM函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "\\brtrim\\(.*\\,.*\\)",
          "recommend": "RTRIM(string1 [, set ])暂不支持，可尝试使用TRIM函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "\\b(ADD_MONTHS|DATE_ADD|DATE_SUB)\\b",
          "recommend": "可尝试使用DATE_ADD('', INTERVAL 1 MONTH)等替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "\\b(PERIOD_DIFF|MONTHS_BETWEEN)\\b",
          "recommend": "暂不支持,可尝试使用TIMESTAMPDIFF",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "\\bround\\s*\\(.*(date|timestamp).*\\)",
          "recommend": "暂不支持,可尝试使用DATE_FORMAT函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "\\b(to_timestamp)\\b",
          "recommend": "可尝试使用STR_TO_DATE函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "(TO_DSINTERVAL|TO_YMINTERVAL)\\s*\\(.*\\)",
          "recommend": "可尝试使用date_add|date_diff",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "(TO_DSINTERVAL|TO_YMINTERVAL)\\s*\\(.*\\)",
          "recommend": "可尝试使用date_add|date_diff",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "\\bTRUNC\\s*\\(.*(date|timestamp).*\\)",
          "recommend": "可尝试使用DATE_FORMAT函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\b(BIN_TO_NUM|conv)\\b",
          "recommend": "可尝试使用CONV函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "\\b(NUMTODSINTERVAL|NUMTOYMINTERVAL)\\b",
          "recommend": "可尝试使用date_add",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "\\b(NUMTODSINTERVAL|NUMTOYMINTERVAL)\\b",
          "recommend": "可尝试使用date_add",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\b(scn_to_timestamp)\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\b(timestamp_to_scn)\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "\\bto_char\\s*\\(.*\\,.*\\)",
          "recommend": "暂不支持,可尝试使用DATE_FORMAT函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "\\b(to_clob)\\b",
          "recommend": "数据类型中的不兼容，尝试替换数据类型",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "\\bto_date\\s*\\(.*\\,.*\\)",
          "recommend": "可尝试使用STR_TO_DATE函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\bto_nchar\\s*\\(.*\\)",
          "recommend": "字符集转换,可尝试使用convert|cast函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "\\b(sys_connect_by_path)\\b",
          "recommend": "暂不支持,可尝试自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "\\bdecode\\s*\\(\\b.*\\,.*\\)",
          "recommend": "可尝试使用IF函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "\\bnvl\\s*\\(.*\\,.*\\)",
          "recommend": "可尝试使用IFNULL函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "\\bsys_context\\s*\\(.*\\,.*\\)",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "\\bsys_guid\\s*\\(\\s*\\)",
          "recommend": "可尝试使用UUID函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\buserenv\\s*\\(.*\\)",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "\\b(CORR|COVAR_POP|COVAR_SAMP)\\b",
          "recommend": "相关系数,可尝试自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "\\bmedian\\s*\\(.*\\)",
          "recommend": "暂不支持,可尝试使用自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "\\bpercentile_count\\s*\\(.*\\)",
          "recommend": "暂不支持,可尝试使用自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "\\bpercentile_disc\\s*\\(.*\\)",
          "recommend": "暂不支持,可尝试使用自定义函数处理",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bjson_query\\s*\\(.*\\)",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "\\blistagg\\s*\\(.*\\,.*\\)",
          "recommend": "暂不支持，可尝试使用GROUP_CONCAT函数",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "\\bkeep\\s*\\(.*\\)",
          "recommend": "分析函数,暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\(",
          "recommend": "mysql8不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "mysql8暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bLEADING\\b[^/]*?\\*/",
          "recommend": "可尝试使用JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bORDERED\\b[^/]*?\\*/",
          "recommend": "可尝试使用JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "/\\*+[^/]*?\\bFULL\\b[^/]*?\\*/",
          "recommend": "可尝试使用NO_INDEX",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_FFS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "暂不支持,可尝试使用SKIP_SCAN|NO_SKIP_SCAN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "可尝试使用use_invisible_indexes=off",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH\\b[^/]*?\\*/",
          "recommend": "暂不支持,可尝试使用BNL|NO_BNL",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bSWAP_JOIN_INPUTS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL\\b[^/]*?\\*/",
          "recommend": "暂不支持,可尝试使用BNL|NO_BNL",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持,可尝试使用NO_BNL SEMIJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "暂不支持，可尝试使用BNL_SEMJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持,可尝试使用NO_BNL SEMIJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "暂不支持,可尝试使用BNL SEMIJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "/\\*+[^/]*?\\bORDERED_PREDICATES\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/",
          "recommend": "MySQL不支持该类优化器提示",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bMATERIALIZE\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "使用EXPLAIN分析查询的执行计划；或使用一些性能监控/调优工具；",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "ALTER\\s+SESSION\nSET\\s+@@SESSION",
          "recommend": "使用set session",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "\\balter\\s*system\\s*(set){0,1}",
          "recommend": "使用set global",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "\\bROWNUM\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "\\bconnect by\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "\\(\\+\\)",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "\\bFULL\\s*OUTER\\s*JOIN",
          "recommend": "暂不支持,可尝试使用union",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "\\bUTL_FILE\\.",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "(\\bcreate\\s*database\\s*link|dblink)",
          "recommend": "暂不支持，可尝试使用FEDERATED引擎",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "\\b(rowid|urowid|rownum)\\b",
          "recommend": "暂不支持，rowid在oracle中是一个伪列，在mysql中没有与之对应的伪列",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bRAW\\b",
          "recommend": "专有特性，如需可以考虑BIT",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "NVARCHAR2\\b",
          "recommend": "专有特性",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bVARCHAR2\\b",
          "recommend": "专有特性",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bROWID\\b",
          "recommend": "专有特性",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "专有特性",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_DOUBLE\\b",
          "recommend": "专有特性",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bCLOB\\b",
          "recommend": "专有特性",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "TDMySQL57": {
      "DML": [
        {
          "desc": "[向分区]插入数据",
          "syntax": "INSERT INTO t [PARTITION (partition_list)] [(col,...)] VALUES",
          "originExample": "CREATE TABLE test.b1\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.b1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.b1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.b1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.b1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.b1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.b1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.b1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.b1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.b1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.b1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.b1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.b1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.b1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.b1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.b1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.b1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "insert\\s+all\\s+into",
          "recommend": "不支持insert all into，改成形如 insert into table values(id1),(id2)",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "冲突解决",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "MERGE\\s+INTO\\b",
          "recommend": "最好是改成insert select from where not exists和update from where exists,或者为 INSERT INTO … ON DUPLICATE KEY UPDATE …. ",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "插入选取数据",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.b2\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nMERGE INTO test.b1 dst\nUSING (SELECT * FROM test.b2) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;",
          "originExample": "UPDATE test.b1 SET dept_no = 1, country='cin' WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE t1[PARTITION (partition_list)],t2 SET … WHERE …",
          "originExample": "UPDATE test.b3 PARTITION (europe) SET PART_NO =10,country='FRANCE'WHERE dept_no = 5;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表更新",
          "syntax": "UPDATE target_table\nSET target_column = (\n  SELECT source_column\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM source_table\n  WHERE source_table.join_column = target_table.join_column\n);",
          "originExample": "UPDATE test.b2 target_table\nSET dept_no = (\n  SELECT dept_no\n  FROM test.b1 source_table\n  WHERE source_table.amount = target_table.amount\n)\nWHERE EXISTS (\n  SELECT 1\n  FROM test.B1  source_table\n  WHERE source_table.amount = target_table.amount\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入选取的数据，冲突则替换",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区数据",
          "syntax": "DELETE FROM t[PARTITION (partition_list)]",
          "originExample": "DELETE FROM test.b3 PARTITION (americas) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表空间",
          "syntax": "DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [AND DATAFILES] [CASCADE CONSTRAINTS];",
          "originExample": "CREATE TABLESPACE example_tablespace\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  DEFAULT STORAGE (INITIAL 10M);\nDROP TABLESPACE example_tablespace INCLUDING CONTENTS AND DATAFILES;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "联表删除",
          "syntax": "DELETE FROM table1\nWHERE (column1, column2) IN (\n  SELECT t1.column1, t1.column2\n  FROM table1 t1\n  INNER JOIN table2 t2 ON t1.columnX = t2.columnY\n  WHERE your_condition\n);",
          "originExample": "DELETE FROM test.b4\nWHERE (a,b) IN (\n  SELECT t1.a, t1.b\n  FROM test.b5 t1\n  INNER JOIN test.b4 t2 ON t1.a = t2.a\n  WHERE t1.b=2\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "联表删除其一",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "delete\nfrom a\nwhere exists\n(\n     select 1\n     from b\n     Where a.a = b.b\n)",
          "originExample": "CREATE TABLE test.orders (\n    order_id INT PRIMARY KEY,\n    order_date DATE,\n    customer_id INT\n);\n\nCREATE TABLE test.order_items (\n    item_id INT PRIMARY KEY,\n    order_id INT,\n    product_id INT,\n    quantity INT,\n    FOREIGN KEY (order_id) REFERENCES orders(order_id)\n);\nDELETE FROM test.orders a\nWHERE EXISTS\n(\n    SELECT 1\n    FROM test.order_items b\n    WHERE a.order_id=b.item_id\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "CREATE TABLE test.stu (\n  s_id NUMBER,\n  s_xm VARCHAR2(100)\n);\n\n\nDECLARE\n   v_xm char;\nBEGIN\n   INSERT INTO test.stu(s_id, s_xm) VALUES (1, '小游子') RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('插入后的 s_xm ：' || v_xm);\n   v_xm:= NULL;\n   UPDATE stu SET s_xm = '小优子' WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('修改后的 s_xm ：' || v_xm);\n   v_xm:= NULL;   \n   DELETE stu WHERE s_id = 1 RETURNING s_xm INTO v_xm;\n   dbms_output.put_line('删除前的 s_xm ：' || v_xm);\nEXCEPTION\n   WHEN OTHERS THEN\n      dbms_output.put_line(SQLCODE || ' : ' || SQLERRM);\n      dbms_output.put_line(dbms_utility.format_error_backtrace);\nEND;",
          "regexp": "\\bDELETE\\b\\s+\\bFROM\\b[\\s\\S]+\\bRETURNING\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SQL*Loader",
          "originExample": "sqlldr",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE FROM test.b4\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... UPDATE ...",
          "originExample": "UPDATE test.b4\nSET c = 'New Value'\nWHERE (a, b) IN (\n  SELECT a, b\n  FROM test.b4\n  WHERE a = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSERT ... WITH ... SELECT ...",
          "originExample": "CREATE TABLE test.b5(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.b4 (a, b, c)\nSELECT a, b, c\nFROM test.b5\nWHERE EXISTS (\n  SELECT 1\n  FROM test.b4\n  WHERE test.b4.a = test.b5.a\n    AND test.b4.b = test.b5.b\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "调用存储过程",
          "syntax": "CALL sp_name([parameter[,...]])",
          "originExample": "CREATE OR REPLACE PROCEDURE test.hello\nIS\nBEGIN\nDBMS_OUTPUT.PUT_LINE('Hello World!');\nEND hello;\ncall hello();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dual查询",
          "syntax": "select 1 from dual",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "系统视图",
          "syntax": "SELECT * FROM tabs\nselect * from USER_TABLES;\nselect * from col\nSELECT * FROM user_tab_cols",
          "originExample": "SELECT * FROM tabs;\nselect * from USER_TABLES;\nselect * from col;\nSELECT * FROM user_tab_cols;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT [DISTINCT] FROM t,t1 [partition],t2 WHERE \nGROUP BY … [WITH ROLLUP]\n [HAVING where_condition]\n      [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n      [OFFSET offset ROWS FETCH NEXT rowcount ROWS]",
          "originExample": "CREATE TABLE test.\"ACCOCFMCUSTTMP_10\" \n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2), \n\"C3\" UROWID (6), \n\"C4\" UROWID (4000), \n\"C5\" CLOB, \n\"C6\" BLOB, \n\"C8\" NCLOB, \n\"C9\" RAW(10), \n\"C10\" ROWID, \n\"A1\" NUMBER(*,0), \n\"A2\" FLOAT(126), \n\"A3\" NUMBER(10,2), \n\"A4\" NUMBER(*,0), \n\"A5\" NUMBER(10,2), \n\"A6\" NUMBER(*,0), \n\"A7\" NUMBER(*,2), \n\"A8\" NUMBER(3,5), \n\"A9\" NUMBER(10,0), \n\"B1\" NUMBER(10,2), \n\"B2\" NUMBER(10,10), \n\"B3\" NUMBER(10,11), \n\"B4\" NUMBER(1,127), \n\"C_SHACCO3\" NUMBER(*,0), \n\"CONFIDENTIAL_DOC_CODE1\" NUMBER(14,0) NOT NULL ENABLE, \n\"D3\" NUMBER(20,0), \n\"D4\" NUMBER(10,3), \n\"C28\" FLOAT(10) NOT NULL ENABLE, \n\"C222\" NUMBER(4,0) NOT NULL ENABLE, \n\"C33\" NUMBER(16,0) NOT NULL ENABLE, \n\"C12\" VARCHAR2(10) NOT NULL ENABLE, \n\"C11\" NCHAR(10), \n\"C14\" UROWID (4000) NOT NULL ENABLE, \n\"C15\" CLOB NOT NULL ENABLE, \n\"C16\" BLOB NOT NULL ENABLE, \n\"C20\" NVARCHAR2(10) NOT NULL ENABLE, \n\"C21\" NCLOB NOT NULL ENABLE, \n\"C22\" RAW(10) NOT NULL ENABLE, \n\"C23\" ROWID NOT NULL ENABLE, \n\"C24\" DATE NOT NULL ENABLE, \n\"C25\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"C26\" INTERVAL YEAR (4) TO MONTH NOT NULL ENABLE, \n\"C27\" INTERVAL DAY (4) TO SECOND (2) NOT NULL ENABLE, \n\"C29\" NUMBER(*,0) NOT NULL ENABLE, \n\"C30\" NUMBER(*,0) NOT NULL ENABLE, \n\"C31\" FLOAT(126) NOT NULL ENABLE, \n\"C32\" NUMBER(10,2) NOT NULL ENABLE, \n\"C3333\" NUMBER(10,2) NOT NULL ENABLE, \n\"C34\" NUMBER NOT NULL ENABLE, \n\"C35\" NUMBER NOT NULL ENABLE, \n\"C36\" NUMBER(3,5) NOT NULL ENABLE, \n\"C37\" NUMBER(9,0) NOT NULL ENABLE, \n\"C38\" NUMBER(12,0) NOT NULL ENABLE, \n\"C39\" NUMBER(29,0) NOT NULL ENABLE, \n\"D1\" FLOAT(1) NOT NULL ENABLE, \n\"D2\" FLOAT(4) NOT NULL ENABLE, \n\"D31\" FLOAT(6) NOT NULL ENABLE, \n\"D41\" FLOAT(8) NOT NULL ENABLE, \n\"D5\" FLOAT(20) NOT NULL ENABLE, \n\"D6\" FLOAT(30) NOT NULL ENABLE, \n\"D7\" FLOAT(40) NOT NULL ENABLE, \n\"D8\" FLOAT(50) NOT NULL ENABLE, \n\"D9\" FLOAT(51) NOT NULL ENABLE, \n\"D10\" FLOAT(52) NOT NULL ENABLE, \n\"E12\" NUMBER(20,0) NOT NULL ENABLE, \n\"E13\" NUMBER(28,0) NOT NULL ENABLE, \n\"E14\" NUMBER(30,0) NOT NULL ENABLE, \n\"E15\" NUMBER(38,0) NOT NULL ENABLE, \n\"E17\" NUMBER(*,2) NOT NULL ENABLE, \n\"F1\" INTERVAL YEAR (8) TO MONTH NOT NULL ENABLE, \n\"F2\" INTERVAL DAY (8) TO SECOND (9) NOT NULL ENABLE, \n\"F3\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F4\" TIMESTAMP (6) NOT NULL ENABLE, \n\"F5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"F6\" INTERVAL DAY (2) TO SECOND (6) NOT NULL ENABLE, \n\"H1\" RAW(1) NOT NULL ENABLE, \n\"H2\" RAW(2) NOT NULL ENABLE, \n\"H3\" RAW(53) NOT NULL ENABLE, \n\"H5\" RAW(2000) NOT NULL ENABLE, \n\"H6\" RAW(10) NOT NULL ENABLE, \n\"Z1\" TIMESTAMP (1) NOT NULL ENABLE, \n\"Z2\" TIMESTAMP (6) NOT NULL ENABLE, \n\"Z3\" TIMESTAMP (9) NOT NULL ENABLE, \n\"Z5\" TIMESTAMP (6) NOT NULL ENABLE, \n\"I1\" TIMESTAMP (1) WITH TIME ZONE NOT NULL ENABLE, \n\"I2\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I3\" TIMESTAMP (9) WITH TIME ZONE NOT NULL ENABLE, \n\"I5\" TIMESTAMP (6) WITH TIME ZONE NOT NULL ENABLE, \n\"I6\" TIMESTAMP (2) WITH TIME ZONE NOT NULL ENABLE, \n\"I7\" TIMESTAMP (4) WITH TIME ZONE NOT NULL ENABLE, \n\"W1\" CHAR(100) NOT NULL ENABLE, \n\"W2\" CHAR(1) NOT NULL ENABLE, \n\"W3\" CHAR(1) NOT NULL ENABLE, \n\"W4\" LONG RAW NOT NULL ENABLE, \n\"W5\" NVARCHAR2(200) NOT NULL ENABLE, \n\"W6\" NCHAR(1) NOT NULL ENABLE, \n\"W7\" NCHAR(200) NOT NULL ENABLE, \n\"W8\" NUMBER(*,0) NOT NULL ENABLE, \n\"W9\" NUMBER(*,0) NOT NULL ENABLE, \n\"W15\" INTERVAL YEAR (2) TO MONTH NOT NULL ENABLE, \n\"W11\" BINARY_DOUBLE NOT NULL ENABLE, \n\"W13\" BINARY_FLOAT NOT NULL ENABLE, \n\"W16\" UROWID (2) NOT NULL ENABLE, \n\"W17\" UROWID (10) NOT NULL ENABLE, \n\"COLUMN2\" FLOAT(126), \n\"COLUMN3\" FLOAT(126)\n   ) SEGMENT CREATION DEFERRED \n  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n  TABLESPACE \"USERS\" \n LOB (\"C5\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C6\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C8\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C15\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C16\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) \n LOB (\"C21\") STORE AS BASICFILE (\n  TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n  NOCACHE LOGGING ) ;\n  CREATE TABLE test.c1(\n  a char,\n  b number\n  )\n  \n SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3\n    AND \"CFM_UNDROZEN_AMT\" > 1000\n    AND W1 IN (SELECT a FROM test.c1 WHERE b=2)\nORDER BY\n    \"TRANS_DATE\" DESC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "设置查询的超时时间",
          "syntax": "/",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "   SELECT\n    \"BUSIN_CODE\",\n    \"TRANS_DATE\",\n    \"BIRTHDAY\",\n    \"FROZEN_END_DATE\",\n    \"ORI_SERIAL_NO\",\n    \"CFM_DATE\",\n    \"CFM_UNDROZEN_AMT\",\n    \"ID_CODE_DATE\",\n    \"REMARK\",\n    \"RISK_LEVEL\",\n    \"CONTROLER_IDVALID\",\n    \"ACTOR_IDVALID\",\n    \"AUX_ID_CODE\",\n    \"AUX_ID_CODE_DATE\",\n    \"IP\",\n    \"TRANS_TIME\",\n    \"COLUMN1\",\n    \"COL\",\n    \"C1\",\n    \"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10\nWHERE\n    \"RISK_LEVEL\" > 3 for update skip locked",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "判断是否为树叶子节点",
          "syntax": "connect_by_isleaf",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "内连接",
          "syntax": "SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b WHERE orderPlaced >= to_date('2020-01-02','%Y%m%d');\nSELECT * FROM t1, t2 WHERE t1.a = t2.b;",
          "originExample": "    SELECT\n    t1.\"BUSIN_CODE\",\n    t1.\"TRANS_DATE\",\n    t1.\"BIRTHDAY\",\n    t1.\"FROZEN_END_DATE\",\n    t1.\"ORI_SERIAL_NO\",\n    t1.\"CFM_DATE\",\n    t1.\"CFM_UNDROZEN_AMT\",\n    t1.\"ID_CODE_DATE\",\n    t1.\"REMARK\",\n    t1.\"RISK_LEVEL\",\n    t1.\"CONTROLER_IDVALID\",\n    t1.\"ACTOR_IDVALID\",\n    t1.\"AUX_ID_CODE\",\n    t1.\"AUX_ID_CODE_DATE\",\n    t1.\"IP\",\n    t1.\"TRANS_TIME\",\n    t1.\"COLUMN1\",\n    t1.\"COL\",\n    t1.\"C1\",\n    t1.\"C2\"\nFROM\n    test.ACCOCFMCUSTTMP_10 t1\n    INNER JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "SELECT * FROM t1 CROSS JOIN t2;\nSELECT * FROM t1, t2;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10, test.c1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN test.c1  t2 ON  t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全外连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b\nUNION\nSELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 \nFULL OUTER JOIN test.c1 ON a=w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "带子查询的左连接",
          "syntax": "SELECT * FROM t1 LEFT JOIN (select * from t2) as t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nLEFT JOIN (\n    SELECT *\n    FROM test.c1\n    WHERE a=1 AND b=2\n) c1_subquery  ON  a=t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "SELECT * FROM t1 RIGHT JOIN t2 ON t1.a = t2.b;",
          "originExample": "SELECT *\nFROM test.ACCOCFMCUSTTMP_10 t1\nRIGHT JOIN test.c1 t2 ON t2.a = t1.w1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "标量子查询",
          "syntax": "SELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       (SELECT MAX(b) FROM test.c1) AS max_b\nFROM test.ACCOCFMCUSTTMP_10 t1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "行子查询",
          "syntax": "SELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE (t1.\"BUSIN_CODE\", t1.\"BIRTHDAY\") IN (SELECT \"BUSIN_CODE\", \"BIRTHDAY\" FROM test.c1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id); ",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING MIN(num2)=40);",
          "originExample": "SELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\"\nFROM test.ACCOCFMCUSTTMP_10 t1\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM test.c1\n    WHERE t1.w1 = a\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内嵌视图",
          "syntax": "SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;",
          "originExample": "CREATE TABLE test.c3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT t1.\"BUSIN_CODE\",\n       t1.\"TRANS_DATE\",\n       t1.\"BIRTHDAY\",\n       v.total_c2\nFROM test.ACCOCFMCUSTTMP_10 t1\nINNER JOIN (\n    SELECT \"BUSIN_CODE\", SUM(\"C2\") AS total_c2\n    FROM test.c3\n    GROUP BY \"BUSIN_CODE\"\n) v ON t1.\"BUSIN_CODE\" = v.\"BUSIN_CODE\";",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "CREATE TABLE test.c4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nINTERSECT\nSELECT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "SELECT * FROM a\nUNION\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "SELECT * FROM a\nUNION ALL\nSELECT * FROM b",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nUNION ALL\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "select * from A minus select * from B",
          "originExample": "SELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c3\nMINUS\nSELECT DISTINCT \"BUSIN_CODE\", \"TRANS_DATE\", \"BIRTHDAY\"\nFROM test.c4;",
          "regexp": "\\bminus\\b",
          "recommend": "可尝试使用left join，再where条件上加上 连接字段值为空",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "递归层次查询",
          "syntax": "WITH ancestors AS \n ( SELECT * FROM folks\n   WHERE name=\"Alex\"\n   UNION ALL\n   SELECT f.*\n   FROM folks AS f, ancestors AS a\n   WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;",
          "originExample": "create table tb_menu(\n\nid number(10) not null, --主键id\n\ntitle varchar2(50), --标题\n\nparent number(10) --parent id\n\n)\n\n \n\n--父菜单\n\ninsert into tb_menu(id, title, parent) values(1, '父菜单1',null);\n\ninsert into tb_menu(id, title, parent) values(2, '父菜单2',null);\n\ninsert into tb_menu(id, title, parent) values(3, '父菜单3',null);\n\ninsert into tb_menu(id, title, parent) values(4, '父菜单4',null);\n\ninsert into tb_menu(id, title, parent) values(5, '父菜单5',null);\n\n--一级菜单\n\ninsert into tb_menu(id, title, parent) values(6, '一级菜单6',1);\n\ninsert into tb_menu(id, title, parent) values(7, '一级菜单7',1);\n\ninsert into tb_menu(id, title, parent) values(8, '一级菜单8',1);\n\ninsert into tb_menu(id, title, parent) values(9, '一级菜单9',2);\n\ninsert into tb_menu(id, title, parent) values(10, '一级菜单10',2);\n\ninsert into tb_menu(id, title, parent) values(11, '一级菜单11',2);\n\ninsert into tb_menu(id, title, parent) values(12, '一级菜单12',3);\n\ninsert into tb_menu(id, title, parent) values(13, '一级菜单13',3);\n\ninsert into tb_menu(id, title, parent) values(14, '一级菜单14',3);\n\ninsert into tb_menu(id, title, parent) values(15, '一级菜单15',4);\n\ninsert into tb_menu(id, title, parent) values(16, '一级菜单16',4);\n\ninsert into tb_menu(id, title, parent) values(17, '一级菜单17',4);\n\ninsert into tb_menu(id, title, parent) values(18, '一级菜单18',5);\n\ninsert into tb_menu(id, title, parent) values(19, '一级菜单19',5);\n\ninsert into tb_menu(id, title, parent) values(20, '一级菜单20',5);\n\n--二级菜单\n\ninsert into tb_menu(id, title, parent) values(21, '二级菜单21',6);\n\ninsert into tb_menu(id, title, parent) values(22, '二级菜单22',6);\n\ninsert into tb_menu(id, title, parent) values(23, '二级菜单23',7);\n\ninsert into tb_menu(id, title, parent) values(24, '二级菜单24',7);\n\ninsert into tb_menu(id, title, parent) values(25, '二级菜单25',8);\n\ninsert into tb_menu(id, title, parent) values(26, '二级菜单26',9);\n\ninsert into tb_menu(id, title, parent) values(27, '二级菜单27',10);\n\ninsert into tb_menu(id, title, parent) values(28, '二级菜单28',11);\n\ninsert into tb_menu(id, title, parent) values(29, '二级菜单29',12);\n\ninsert into tb_menu(id, title, parent) values(30, '二级菜单30',13);\n\ninsert into tb_menu(id, title, parent) values(31, '二级菜单31',14);\n\ninsert into tb_menu(id, title, parent) values(32, '二级菜单32',15);\n\ninsert into tb_menu(id, title, parent) values(33, '二级菜单33',16);\n\ninsert into tb_menu(id, title, parent) values(34, '二级菜单34',17);\n\ninsert into tb_menu(id, title, parent) values(35, '二级菜单35',18);\n\ninsert into tb_menu(id, title, parent) values(36, '二级菜单36',19);\n\ninsert into tb_menu(id, title, parent) values(37, '二级菜单37',20);\n\n--三级菜单\n\ninsert into tb_menu(id, title, parent) values(38, '三级菜单38',21);\n\ninsert into tb_menu(id, title, parent) values(39, '三级菜单39',22);\n\ninsert into tb_menu(id, title, parent) values(40, '三级菜单40',23);\n\ninsert into tb_menu(id, title, parent) values(41, '三级菜单41',24);\n\ninsert into tb_menu(id, title, parent) values(42, '三级菜单42',25);\n\ninsert into tb_menu(id, title, parent) values(43, '三级菜单43',26);\n\ninsert into tb_menu(id, title, parent) values(44, '三级菜单44',27);\n\ninsert into tb_menu(id, title, parent) values(45, '三级菜单45',28);\n\ninsert into tb_menu(id, title, parent) values(46, '三级菜单46',28);\n\ninsert into tb_menu(id, title, parent) values(47, '三级菜单47',29);\n\ninsert into tb_menu(id, title, parent) values(48, '三级菜单48',30);\n\ninsert into tb_menu(id, title, parent) values(49, '三级菜单49',31);\n\ninsert into tb_menu(id, title, parent) values(50, '三级菜单50',31);\n\ncommit;\nwith tmp as(\n\n      select a.*, level leaf       \n\n      from tb_menu a               \n\n      start with a.parent is null     \n\n      connect by a.parent = prior a.id)\n\nselect *                              \n\nfrom tmp                            \n\nwhere leaf = (select leaf from tmp where id = 6) - 1;",
          "regexp": "",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "select * from t wehre id in '123';\nin 不带括号",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "WITH在内嵌视图中",
          "syntax": "SELECT * FROM (WITH ... SELECT ...) AS dt ...",
          "originExample": "  WITH view_name as (\n  SELECT id, title, parent\n  FROM tb_menu\n  WHERE id>20\n) SELECT *\nFROM  view_name ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH在子查询中",
          "syntax": "SELECT t1.a, t1.b FROM t1, t2\n  WHERE t1.a > t2.c \n     AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n                SELECT t2.c FROM t2, t WHERE t2.c = t.a);",
          "originExample": "SELECT c4.BUSIN_CODE, c4.TRANS_DATE, c4.BIRTHDAY\nFROM test.c3 c3,test.c4 c4\nWHERE c3.BUSIN_CODE>c4.BUSIN_CODE\nAND c3.TRANS_DATE IN (WITH t AS (SELECT TRANS_DATE FROM test.ACCOCFMCUSTTMP_10) SELECT t.TRANS_DATE FROM t  )",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH嵌套引用",
          "syntax": "WITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN('Development','Support') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN('NL',...) )\nSELECT\n...\nFROM eu_engineers;",
          "originExample": "WITH \n  cte1 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c3\n    WHERE BUSIN_CODE > 20\n  ),\n  cte2 AS (\n    SELECT BUSIN_CODE, TRANS_DATE, BIRTHDAY\n    FROM test.c4\n    WHERE BUSIN_CODE > 20\n  )\nSELECT *\nFROM (\n  SELECT cte1.BUSIN_CODE, cte2.TRANS_DATE\n  FROM cte1\n  JOIN cte2 ON cte1.BIRTHDAY = cte2.BIRTHDAY\n  WHERE cte1.TRANS_DATE > 0\n) ; ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "with 中使用存储过程等",
          "syntax": "WITH [ plsql_declarations ] [ subquery_factoring_clause | subav_factoring_clause ]\n              [, { subquery_factoring_clause | subav_factoring_clause } ]",
          "originExample": "",
          "regexp": "\\bwith\\s+function\\b\n\\bwith\\s+procedure\\b",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "定义遍历是深度优先还是广度优先。",
          "syntax": "{ SEARCH\n        { DEPTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n         | BREADTH FIRST BY c_alias [, c_alias]...\n            [ ASC | DESC ]\n            [ NULLS FIRST | NULLS LAST ]\n        }\n        SET ordering_column\n}",
          "originExample": "",
          "regexp": "\\bsearch\\s+(depth|breadth)\\s+first\\s+by ",
          "recommend": "手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "分析视图",
          "syntax": "WITH\n  my_av ANALYTIC VIEW AS (\n    USING sales_av HIERARCHIES (time_hier)\n    ADD MEASURES (\n      lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1))\n    )\n  )\nSELECT time_hier.member_name time, sales, lag_sales\nFROM my_av HIERARCHIES (time_hier)\nWHERE time_hier.level_name = 'YEAR'\nORDER BY time_hier.hier_order;",
          "originExample": "",
          "regexp": "\\banalytic\\s+view\\b",
          "recommend": "with中使用分析，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FILTER FACT (MEASURES TO sales BETWEEN 100 AND 200)",
          "originExample": "",
          "regexp": "\\bfilter\\s+fact\\b",
          "recommend": "筛选分析功能，手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bcross\\s+apply\\b\n\\bouter\\s+apply\\b",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bAS\\s+INTO\\b",
          "recommend": "去掉AS，使用SELECT ... INTO ...",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE t",
          "originExample": "--创建表\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nINSERT INTO test.a1 VALUES(1,2,3);\nINSERT INTO test.a1 VALUES(1,2,3);\n\nTRUNCATE TABLE test.a1",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "ALTER INDEX idx ENABLE/DISABLE",
          "originExample": "CREATE INDEX idx_upper_b\nON test.a1 (UPPER(b));\nALTER INDEX idx_upper_b ENABLE;\nALTER INDEX idx_upper_b DISABLE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx UNUSABLE/rebuild",
          "originExample": "--使能/禁用某个索引\nCREATE TABLE test.a1(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE INDEX idx ON test.a1(a)\nALTER INDEX IDX UNUSABLE\nALTER INDEX IDX rebuild",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]",
          "originExample": "CREATE TABLE test.a2(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50),\n d NUMBER DEFAULT 0 NOT NULL ENABLE\n \n)\nCREATE INDEX idx ON test.a2(a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT]  nologging compute statistics",
          "originExample": "CREATE INDEX idx_1 ON test.a2(b)  nologging compute statistics",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [UNIQUE] INDEX idx ON table() [NOWAIT] local",
          "originExample": "create table test.t1(\n id int,\n name varchar2(20)\n) \npartition by range(id)\n( partition p1 values less than (10),\n  partition p2 values less than (20),\n  partition p3 values less than (maxvalue)\n\n);\ncreate index ig_test_id on test.t1(id) LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "Hash分区表创建指定个数的分区索引",
          "syntax": "CREATE INDEX … GLOBAL PARTITION BY HASH(...) …",
          "originExample": "CREATE INDEX cust_last_name_ix ON customers (cust_last_name)\n  GLOBAL PARTITION BY HASH (cust_last_name)\n  PARTITIONS 4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name AS SELECT",
          "originExample": "CREATE TABLE test.a3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);\nCREATE GLOBAL TEMPORARY TABLE test.a3_1 AS SELECT * FROM test.a3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "复制表结构以建立新表",
          "syntax": "CREATE TABLE table AS old_table_name where 1=0",
          "originExample": "CREATE TABLE table AS test.a4",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建表",
          "syntax": "CREATE [GLOBAL|PRIVATE TEMPORARY] TABLE tbl_name (col1 datatype [NOT NULL | NULL] [DEFAULT] [PRIMARY] KEY],col2)",
          "originExample": "CREATE TABLE test.a4\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE,\n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE,\n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE,\n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE,\n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE,\n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,\n\"COLUMN1\" NVARCHAR2(10),\n\"COL\" INTERVAL YEAR (4) TO MONTH,\n\"C1\" NUMBER(*,2),\n\"C2\" NUMBER(10,2)\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "建分区表",
          "syntax": "CREATE TABLE …PARTITION BY",
          "originExample": "CREATE TABLE test.a5\n(\nproduct_id NUMBER(6),\nsale_time TIMESTAMP(6),\nsale_price NUMBER(10,2)\n)\nPARTITION BY RANGE (sale_time)\n(\nPARTITION q1_2023 VALUES LESS THAN (TO_DATE('2023/04/01', 'yyyy/mm/dd')),\nPARTITION q2_2023 VALUES LESS THAN (TO_DATE('2023/07/01', 'yyyy/mm/dd')),\nPARTITION q3_2023 VALUES LESS THAN (TO_DATE('2023/10/01', 'yyyy/mm/dd')),\nPARTITION q4_2023 VALUES LESS THAN (TO_DATE('2024/01/01', 'yyyy/mm/dd'))\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建全局临时表",
          "syntax": "CREATE GLOBAL TEMPORARY TABLE",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "创建视图语法，EDITIONABLE关键字\nCREATE [OR REPLACE] [FORCE] EDITIONABLE VIEW",
          "originExample": "CREATE OR REPLACE FORCE EDITIONABLE VIEW view_editionable_test_v\nas select id,code FROM view_editionable_test;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "合并分区\n适用于HASH分区或子分区",
          "syntax": "ALTER TABLE tbl_name COALESCE PARTITION\ncoalesce_table_partition::=",
          "originExample": "CREATE TABLE test.t_pe_h (i NUMBER, j NUMBER , f number,k varchar2(20))\n     PARTITION BY hash(j)\n        (PARTITION p1 ,\n         PARTITION p2,\n         partition p4,\n         partition p3);\ncreate index t_pe_h_n on test.t_pe_h(i);\ncreate index t_pe_h_l on test.t_pe_h(j) local;\ncreate index t_pe_h_g on test.t_pe_h(f)\n GLOBAL PARTITION BY range(f)\n        (PARTITION p1 VALUES  less than (10),\n         PARTITION p2 VALUES less than (20),\n         PARTITION p3 VALUES less than (maxvalue ));\n        insert into t_pe_h\nvalues(2,5,5,'A');\ninsert into t_pe_h\nvalues(1,15,10,'B');\ninsert into t_pe_h\nvalues(3,25,40,'C');\ninsert into t_pe_h\nvalues(2,65,30,'A');\ninsert into t_pe_h\nvalues(1,75,20,'B');\ninsert into t_pe_h\nvalues(3,85,50,'C');\nALTER TABLE test.t_pe_h    COALESCE PARTITION;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 新增列",
          "syntax": "ALTER TABLE ADD col_name column_definition",
          "originExample": "ALTER TABLE test.a4 ADD C3 NUMBER(10,2)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新增列：多列",
          "syntax": "ALTER TABLE ADD col_name column_definition，column_definition2",
          "originExample": "ALTER TABLE test.a4 add(\ncc1 NUMBER ( 2 ),\ncc2 NUMBER ( 4 ),\ncc3 NUMBER ( 9 ),\ncc4 NUMBER ( 18 ),\ncc5 NUMBER ( 28 ),\ncc6 NUMBER ( 10, 2 ),\ncc7 NUMBER ( 3, 5 ),\ncc8 NUMBER ( * ),\ncc9 NUMBER,\ncc10 NUMBER ( *, 2 ),\ncc11 BFILE,\ncc12 BINARY_FLOAT,\ncc13 BINARY_DOUBLE,\ncc14 BLOB,\ncc15 CHAR ( 200 ),\ncc16 CHARACTER ( 200 ),\ncc17 CLOB,\ncc18 DATE,\ncc19 DOUBLE PRECISION,\ncc20 FLOAT ( 10 ),\ncc21 INT,\ncc22 INTERVAL YEAR ( 4 ) TO MONTH,\ncc23 INTERVAL DAY ( 4 ) TO SECOND ( 2 ),\ncc25 LONG RAW,\ncc26 NCHAR ( 10 ),\ncc27 NCHAR VARYING ( 10 ),\ncc28 NCLOB,\ncc29 NUMERIC ( 10, 2 ),\ncc30 NVARCHAR2 ( 10 ),\ncc31 RAW ( 10 ),\ncc32 REAL,\ncc33 ROWID,\ncc34 SMALLINT,\ncc35 TIMESTAMP ( 6 ),\ncc36 TIMESTAMP ( 6 ) WITH TIME ZONE,\ncc37 UROWID ( 6 )\n)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 设置某列为主键",
          "syntax": "alter table emp_reg add constraint emp_pk primary key(empno);",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 设置主键 并禁用/启用",
          "syntax": "ALTER TABLE … ADD CONSTRAINT … DISABLE/ENABLE",
          "originExample": "ALTER TABLE test.a4 ADD CONSTRAINT t_pk PRIMARY KEY (cc37) disable;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:外键",
          "syntax": "alter table 表名 add constraint 约束名称  foreign key (列名) references 被引用的表名称 （列名）",
          "originExample": "ALTER TABLE test.a2 ADD CONSTRAINT t_pk1 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk2 PRIMARY KEY (b);\nALTER TABLE test.a1 ADD CONSTRAINT t_pk3 foreign KEY (\"B\") references test.a2(\"B\");",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:非空约束",
          "syntax": "alter table 表名 modify 列名 not null;",
          "originExample": "alter table test.a1 modify c not null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:检查约束",
          "syntax": "alter table 表名 add constraint 定义约束名 check(列名 in('男','女'));",
          "originExample": "alter table test.a1 add constraint emp_sex_ck check(b in('男','女'));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束：使用本地索引",
          "syntax": "USING INDEX LOCAL",
          "originExample": "ALTER TABLE test.t1 ADD CONSTRAINT hispkhqs_tcurrents PRIMARY KEY(id) \nusing index LOCAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "表新增约束:unique约束",
          "syntax": "alter table 表名 add constraint 约束名称 unique（列名）",
          "originExample": "alter table test.a1 add constraint ak UNIQUE(c)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "修改表 - 删除约束",
          "syntax": "alter table students drop constraint yy;",
          "originExample": "alter table test.a4 DROP constraint t_pk",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除分区的数据",
          "syntax": "ALTER TABLE t TRUNCATE PARTITION",
          "originExample": "CREATE TABLE test.sales\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nPARTITION BY LIST(country)\n(\n  PARTITION europe VALUES ('FRANCE', 'ITALY'),\n  PARTITION asia VALUES ('INDIA', 'PAKISTAN'),\n  PARTITION americas VALUES ('US', 'CANADA')\n);\nINSERT INTO test.sales PARTITION (europe)(dept_no,part_no,country ,date_str ,amount) VALUES (10, '1314a', 'FRANCE', '11-Aug-2012', '60001');\nINSERT INTO test.sales PARTITION (europe) VALUES (10, '1313a', 'FRANCE', '10-Aug-2012', '60000');\n\nINSERT all\nINTO test.sales VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.sales VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.sales VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.sales VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.sales VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.sales VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.sales VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.sales VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.sales VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.sales VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.sales VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.sales VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.sales VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.sales VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.sales VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.sales VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nALTER TABLE test.sales TRUNCATE PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 新分区",
          "syntax": "ALTER TABLE ADD PARTITIONING",
          "originExample": "ALTER TABLE test.sales ADD PARTITION new_partition VALUES ('NEW_COUNTRY');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除任何现有的分区定义",
          "syntax": "ALTER TABLE t MERGE/COALESCE PARTITIONS",
          "originExample": "",
          "regexp": "ALTER\\s+TABLE[\\s\\S]+\\s+\\b(MERGE|COALESCE|REMOVE)\\b\\s+",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改列的值类型",
          "syntax": "ALTER TALBE t1 MODIFY a NUMBER(18,0);",
          "originExample": "ALTER TABLE test.a4 MODIFY C2 NUMBER(18,0);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "RENAME departments_new TO emp_departments;\nALTER TABLE t RENAME TO t1",
          "originExample": "ALTER TABLE test.a2 RENAME TO a22;",
          "regexp": "^\\s*rename\\s+(?!table)\\b[\\s\\S]+\\s+\\bto",
          "recommend": "rename后需要跟table关键词",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "CREATE INDEX idx1 ON test.a2(a)\nDROP INDEX idx1;",
          "regexp": "^\\s*drop index (?!\\w+\\s+on\\s+\\w+)\\w_+",
          "recommend": "可使用DROP INDEX index_name ON tbl_name|ALTER TALBE DROP INDEX",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表 - 删分区",
          "syntax": "ALTER TABLE t DROP PARTITION partition_names",
          "originExample": "ALTER TABLE test.sales DROP PARTITION americas,asia;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "Grant",
          "syntax": "",
          "originExample": "",
          "regexp": "grant[\\s\\S]*any\\s*table\\b",
          "recommend": "在grant中可使用*.* 尝试替换any table",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改普通表至list分区表",
          "syntax": "ALTER TABLE t MODIFY PARTITION BY LIST (id)",
          "originExample": "ALTER TABLE test_list_tab MODIFY PARTITION BY LIST (id) (\n   PARTITION even VALUES (2, 4, 6, 8),\n   PARTITION odd VALUES (1, 3, 5, 7),\n   PARTITION rest VALUES (DEFAULT));",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "更新分区索引",
          "syntax": "alter table ...modify partition .... UPDATE INDEXES\n   [ ( index ( update_index_partition\n             | update_index_subpartition\n             )\n        [, index ( update_index_partition\n                 | update_index_subpartition\n                 )\n        ]...\n      )\n   ]",
          "originExample": "alter table tb_list1 MODIFY partition by range(city_amount)\n(\n   partition tb_list1_amount1 values less than (101),\n   partition tb_list1_amount2 values less than (105)\n) ONLINE UPDATE INDEXES\n(\n  TB_LIST_I01 global,\n  TB_LIST_I02 local\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "grant\\s+(connect|resource|unlimited\\s+tablespace)\\s+to",
          "recommend": "在grant中，需要指明使用关键词on指明授予权限的表，或者直接使用GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH\n\n      GRANT OPTION;",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "引号支持",
          "syntax": "DELETE FROM \"TSYS_MENU\";\nUPDATE T SET \"EXT_FIELD\" = \"XXX\";",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "delete from (select * from A)",
          "originExample": "",
          "regexp": "delete\\s+from\\s+\\(?\\s*\\bselect\\b",
          "recommend": "建议改成delete from table ",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新增位图索引",
          "syntax": "create bitmap index on table()",
          "originExample": "CREATE BITMAP INDEX name_ix ON test.a2 (a)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "创建表空间",
          "syntax": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'file_path' SIZE file_size\n  [LOGGING | NOLOGGING]\n  [EXTENT MANAGEMENT {LOCAL | DICTIONARY}]\n  [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}]\n  [BLOCKSIZE integer]\n  [DEFAULT STORAGE (storage_clause)]\n  [TEMPORARY | TEMPFILE {file_specification} [REUSE] | [AUTOEXTEND {ON | OFF}]]\n  [ONLINE | OFFLINE];",
          "originExample": "CREATE TABLESPACE tablespace_name\n  DATAFILE 'D:\\ORACLE\\example_tablespace.dbf' SIZE 100M\n  LOGGING\n  EXTENT MANAGEMENT LOCAL\n  SEGMENT SPACE MANAGEMENT AUTO\n  BLOCKSIZE 8192\n  ONLINE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "\\b(bitand)\\b",
          "recommend": "使用 & 连接符操作",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT exp(2) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "\\bDBMS_RANDOM\\.RANDOM\\b",
          "recommend": "使用rand函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "\\btrunc\\b",
          "recommend": "尝试使用truncate替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "",
          "recommend": "不兼容但可能存在误扫，不扫描",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "\\binitcap\\b",
          "recommend": "使用了UCASE函数将首字母大写，LCASE函数将其他字母小写，并使用CONCAT_WS函数将它们组合成一个单词",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "\\bREGEXP_REPLACE\\b",
          "recommend": "使用REGEXP正则表达式匹配和SUBSTRING函数来实现相同的功能",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "\\bREGEXP_SUBSTR\\b",
          "recommend": "使用@变量和自定义函数实现",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "\\bREGEXP_INSTR\\b",
          "recommend": "可以使用REGEXP正则表达式匹配函数来实现类似的功能，然后使用INSTR函数来查找匹配的位置",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "\\bADD_MONTHS\\b",
          "recommend": "尝试使用date_add和interval month等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "\\bMONTHS_BETWEEN\\b",
          "recommend": "尝试使用period_diff等替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "\\bTO_TIMESTAMP\\b",
          "recommend": "尝试使用STR_TO_DATE等函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "\\b(to_dsinterval)\\b",
          "recommend": "尝试使用INTERVAL等替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "\\b(to_yminterval)\\b",
          "recommend": "尝试使用INTERVAL等替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "\\bBIN_TO_NUM\\b",
          "recommend": "不兼容，尝试使用conv替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST\nTO_NUMBER",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "\\bto_number\\b",
          "recommend": "尝试使用cast函数替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "\\bNUMTODSINTERVAL\\b",
          "recommend": "可尝试使用SEC_TO_TIME()",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM PERSON;",
          "regexp": "\\bscn_to_timestamp\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(ts) FROM (SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) AS ts FROM PERSON);",
          "regexp": "\\bTIMESTAMP_TO_SCN\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "TO_CHAR (datetime)",
          "originExample": "SELECT to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;",
          "regexp": "\\bto_char\\b",
          "recommend": "尝试使用DATE_FORMAT、cast  .. as char替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB('This is a CLOB value.') AS my_clob FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "\\b(to_nchar)\\b",
          "recommend": "可通过手动代码替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE employees (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO employees (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM employees\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "\\bSYS_CONNECT_BY_PATH\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "\\bnvl\\b",
          "recommend": "尝试使用ifnull",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "\\bsys_context\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "\\bsys_guid\\b",
          "recommend": "尝试使用uuid()替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\buserenv\\b",
          "recommend": "系统环境变量，尝试查询MySQL的系统表",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\n-- 添加示例数据\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\nSELECT AVG(salary) AS average_salary\nFROM employees_AVG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "\\bcorr\\b",
          "recommend": "不兼容",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "\\b(CORR_S|CORR_K)\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "\\bcovar_pop\\b",
          "recommend": "尝试使用VAR_POP替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "\\bcovar_samp\\b",
          "recommend": "尝试使用VAR_SAMP替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "SELECT MAX(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\n\nINSERT INTO sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM sales_MEDIAN;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS max_salary\nFROM department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\n\nINSERT INTO sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount,\n       PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT sale_amount,\n       RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bjson_query\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bjson_table\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names\nFROM product_json;",
          "regexp": "\\bLISTAGG\\b",
          "recommend": "可尝试使用GROUP_CONCAT()",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\n\nINSERT INTO employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\n\n-- 插入示例数据\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\n\nINSERT INTO employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\n-- 使用LAG函数查询前一个员工的信息\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "SELECT ROWID FROM employees \n   WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'\n   ORDER BY ROWID;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "UPDATE print_media\n  SET ad_photo = EMPTY_BLOB();",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "\\bxmlparse\\s*\\(",
          "recommend": "尝试使用ExtractValue等函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "\\bxmlagg\\s*\\(",
          "recommend": "尝试使用GROUP_CONCAT等函数替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bLEADING\\b[^/]*?\\*/",
          "recommend": "可尝试使用JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "/\\*+[^/]*?\\bORDERED\\b[^/]*?\\*/",
          "recommend": "可尝试使用JOIN_PREFIX/JOIN_SUFFIX/JOIN_ORDER ",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "/\\*+[^/]*?\\bFULL\\b[^/]*?\\*/",
          "recommend": "可尝试使用NO_INDEX",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_FFS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bINDEX_SS\\b[^/]*?\\*/",
          "recommend": "可尝试使用SKIP_SCAN|NO_SKIP_SCAN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "可尝试使用use_invisible_indexes=off",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "/\\*+[^/]*?\\bUSE_INVISIBLE_INDEXES\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "/\\*+[^/]*?\\bNATIVE_FULL_OUTER_JOIN\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH\\b[^/]*?\\*/",
          "recommend": "可尝试使用BNL|NO_BNL",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bSWAP_JOIN_INPUTS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bSEMIJOIN_DRIVER\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL\\b[^/]*?\\*/",
          "recommend": "可尝试使用BNL|NO_BNL",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_NL_WITH_INDEX\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_AJ\\b[^/]*?\\*/",
          "recommend": "可尝试使用NO_BNL SEMIJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_AJ\\b[^/]*?\\*/",
          "recommend": "可尝试使用BNL_SEMJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bHASH_SJ\\b[^/]*?\\*/",
          "recommend": "可尝试使用NO_BNL SEMIJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bNL_SJ\\b[^/]*?\\*/",
          "recommend": "可尝试使用BNL SEMIJOIN",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_BAND\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "/\\*+[^/]*?\\bNO_EXPAND\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "/\\*+[^/]*?\\bORDERED_PREDICATES\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bQB_NAME\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_PRED\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bPUSH_SUBQ\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bNOLOGGING\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "/\\*+[^/]*?\\bAPPEND\\b[^/]*?\\*/",
          "recommend": "MySQL不支持该类优化器提示",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "/\\*+[^/]*?\\bBIND_AWARE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bPARALLEL_INDEX\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bPQ_CONCURRENT_UNION\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "/\\*+[^/]*?\\bENABLE_PARALLEL_DML\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bOPT_PARAM\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bRESULT_CACHE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bCACHE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "/\\*+[^/]*?\\bMATERIALIZE\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bAPPEND_VALUES\\b[^/]*?\\*/\n/\\*+[^/]*?\\bSYS_DL_CURSOR\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bMONITOR\\b[^/]*?\\*/",
          "recommend": "使用EXPLAIN分析查询的执行计划；或使用一些性能监控/调优工具；",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_PLAN_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "/\\*+[^/]*?\\bGATHER_OPTIMIZER_STATISTICS\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "/\\*+[^/]*?\\bUSE_HASH_AGGREGATION\\b[^/]*?\\*/",
          "recommend": "不支持",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "ALTER\\s+SESSION\nSET\\s+@@SESSION",
          "recommend": "使用set session",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "\\balter\\s*system\\s*(set){0,1}",
          "recommend": "使用set global",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "@变量",
          "syntax": "rownum",
          "originExample": "CREATE TABLE \"TEST\".g1\n   (\"DEPT_NO\" NUMBER(6,0), \n\"PART_NO\" VARCHAR2(20), \n\"COUNTRY\" VARCHAR2(20), \n\"DATE_STR\" VARCHAR2(20), \n\"AMOUNT\" NUMBER(6,0)\n   ) \n\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\nINSERT ALL  /*+ APPEND_VALUES */\nINTO test.g1 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.g1 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.g1 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.g1 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.g1 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.g1 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.g1 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.g1 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.g1 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.g1 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.g1 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.g1 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.g1 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.g1 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.g1 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.g1 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nCREATE TABLE \"TEST\".g2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\n   CREATE TABLE \"TEST\".g3\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n   );\nSELECT *\nFROM test.g1\nleft JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nLEFT JOIN test.g3  g3 ON  g1.DEPT_NO  =g3.BUSIN_CODE \nLEFT OUTER JOIN test.d1 d1 ON g1.DEPT_NO=d1.BUSIN_CODE \nWHERE g1.DEPT_NO >10 AND ROWNUM <= 20 ;",
          "regexp": "\\bROWNUM\\b",
          "recommend": "尝试使用@变量支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "子查询中不支持limit",
          "syntax": "oracle无此限制",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "pivot/unpivot",
          "originExample": "SELECT *\nFROM (\n  SELECT g1.DEPT_NO, g1.PART_NO ,g1.COUNTRY \n  FROM test.g1 g1\n)\nPIVOT (\n  SUM(DEPT_NO)\n  FOR DEPT_NO IN ('10', '20', '30', '40')\n);create table test.score(\n姓名 varchar2(20),\n语文 number,\n数学 number,\n英语 number\n);\n\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\ninsert into score values ('张三',99,88,78);\ninsert into score values ('李四',93,82,75);\ninsert into score values ('王五',95,83,76);\nselect 姓名,科目,成绩\nfrom score unpivot ( 成绩 for 科目 in ( 语文, 数学, 英语 ) );",
          "regexp": "\\b(pivot|unpivot)\\s*\\(",
          "recommend": "尝试根据语义使用case when去支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "递归树",
          "syntax": "connect by prior",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "递归查询",
          "syntax": "connect by",
          "originExample": "create table test.DEP\n( \nDEPID      number(10) not null, \nDEPNAME    varchar2(32), \nUPPERDEPID number(10),\nNUMOFEMP   number(10)\n) ;\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('0','Dev Center','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('1','DevA','0','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('2','DevA Team1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('3','DevA Team2','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('4','DevA Team3','','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('5','Dev Center1','1','2');\nINSERT INTO test.DEP(DEPID , DEPNAME , UPPERDEPID ,NUMOFEMP ) values ('6','Dev Center','4','2');\n\nselect rpad(' ', 2*(level-1), '-') || depname \"DEPNAME\",\nconnect_by_root depname \"ROOTDEP\",\nconnect_by_isleaf \"ISLEAF\",\nlevel,\nsys_connect_by_path(depname, '/') \"PATH\"\nfrom dep\nstart with upperdepid is null\nconnect by prior depid = upperdepid",
          "regexp": "\\bconnect by\\b",
          "recommend": "暂不支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "(+)",
          "originExample": "SELECT g1.DEPT_NO ,g2.BUSIN_CODE ,g1.PART_NO \nFROM test.g1 g1,test.G2 g2\n--left JOIN test.g2  g2 ON g1.DEPT_NO  = g2.BUSIN_CODE \nWHERE g1.DEPT_NO  = g2.BUSIN_CODE(+);",
          "regexp": "\\(\\+\\)",
          "recommend": "请使用join替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "full outer join",
          "originExample": "SELECT *\nFROM test.g1 g1\nFULL OUTER JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nleft JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\nright JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;\n\nSELECT *\nFROM test.g1 g1\n    INNER  JOIN test.G2 g2 ON g1.DEPT_NO =g2.BUSIN_CODE ;",
          "regexp": "\\bFULL\\s*OUTER\\s*JOIN",
          "recommend": "暂不支持,可尝试使用union",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "文件导出",
          "syntax": "utl_file",
          "originExample": "create or replace directory TESTFILE as 'F:\\test';  \n\n\nDECLARE \nfilehandle utl_file.file_type; --句柄 \nbegin \nfilehandle := utl_file.fopen('TESTFILE','cf.txt','w'); --打开文件 \nutl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录 \nutl_file.put_line(filehandle,'Hello World!'); \nutl_file.put_line(filehandle,'你好，胖子！'); \nutl_file.fclose(filehandle);--关闭句柄 \nend; ",
          "regexp": "\\bUTL_FILE\\.",
          "recommend": "使用存储过程或者LOAD DATA INFILE等替换",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "数据类型long raw、urowid",
          "syntax": "类型long raw ,urowid",
          "originExample": "CREATE TABLE test.g4 (\n    gg1 urowid,\n    C14 UROWID NOT NULL,\n    ddd2 LONG raw NOT NULL,\n    gg5 number(3,5),\n     gg2 dec(3,5),\n     gg3 DECIMAL(3,5),\n     gg4 NUMERIC(3,5),\nBUSIN_CODE VARCHAR2(6) DEFAULT ' '  NOT NULL,\nTRANS_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nBIRTHDAY NUMBER(38,0) DEFAULT 0  NOT NULL,\nFROZEN_END_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nORI_SERIAL_NO VARCHAR2(32) DEFAULT ' '  NOT NULL,\nCFM_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nCFM_UNDROZEN_AMT NUMBER(18,2) DEFAULT 0  NOT NULL,\nID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nREMARK VARCHAR2(250) DEFAULT ' '  NOT NULL,\nRISK_LEVEL NUMBER(38,0) DEFAULT 0  NOT NULL,\nCONTROLER_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nACTOR_IDVALID NUMBER(38,0) DEFAULT 0  NOT NULL,\nAUX_ID_CODE VARCHAR2(50) DEFAULT ' '  NOT NULL,\nAUX_ID_CODE_DATE NUMBER(38,0) DEFAULT 0  NOT NULL,\nIP VARCHAR2(40) DEFAULT ' '  NOT NULL,\nTRANS_TIME NUMBER(38,0) DEFAULT 0  NOT NULL,\nCOLUMN1 NVARCHAR2(10) NULL,\nCOL INTERVAL YEAR(4) TO MONTH NULL,\nC1 NUMBER(38,2) NULL,\nC2 NUMBER(10,2) NULL,\nC3 UROWID NULL,\nC4 UROWID NULL,\nC5 CLOB NULL,\nC6 BLOB NULL,\nC8 NCLOB NULL,\nC9 RAW(10) NULL,\nC10 ROWID NULL,\nA1 NUMBER(38,0) NULL,\nA2 FLOAT NULL,\nA3 NUMBER(10,2) NULL,\nA4 NUMBER(38,0) NULL,\nA5 NUMBER(10,2) NULL,\nA6 NUMBER(38,0) NULL,\nA7 NUMBER(38,2) NULL,\nA8 NUMBER(3,5) NULL,\nA9 NUMBER(10,0) NULL,\nB1 NUMBER(10,2) NULL,\nB2 NUMBER(10,10) NULL,\nB3 NUMBER(10,11) NULL,\nB4 NUMBER(1,127) NULL,\nC_SHACCO3 NUMBER(38,0) NULL,\nCONFIDENTIAL_DOC_CODE1 NUMBER(14,0) NOT NULL,\nD3 NUMBER(20,0) NULL,\nD4 NUMBER(10,3) NULL,\nC28 FLOAT NOT NULL,\nC222 NUMBER(4,0) NOT NULL,\nC33 NUMBER(16,0) NOT NULL,\nC12 VARCHAR2(10) NOT NULL,\nC11 NCHAR(10) NULL,\nC15 CLOB NOT NULL,\nC16 BLOB NOT NULL,\nC20 NVARCHAR2(10) NOT NULL,\nC21 NCLOB NOT NULL,\nC22 RAW(10) NOT NULL,\nC23 ROWID NOT NULL,\nC24 DATE NOT NULL,\nC25 INTERVAL YEAR TO MONTH NOT NULL,\nC26 INTERVAL YEAR(4) TO MONTH NOT NULL,\nC27 INTERVAL DAY(4) TO SECOND(2) NOT NULL,\nC29 NUMBER(38,0) NOT NULL,\nC30 NUMBER(38,0) NOT NULL,\nC31 FLOAT NOT NULL,\nC32 NUMBER(10,2) NOT NULL,\nC3333 NUMBER(10,2) NOT NULL,\nC34 NUMBER NOT NULL,\nC35 NUMBER NOT NULL,\nC36 NUMBER(3,5) NOT NULL,\nC37 NUMBER(9,0) NOT NULL,\nC38 NUMBER(12,0) NOT NULL,\nC39 NUMBER(29,0) NOT NULL,\nD1 FLOAT NOT NULL,\nD2 FLOAT NOT NULL,\nD31 FLOAT NOT NULL,\nD41 FLOAT NOT NULL,\nD5 FLOAT NOT NULL,\nD6 FLOAT NOT NULL,\nD7 FLOAT NOT NULL,\nD8 FLOAT NOT NULL,\nD9 FLOAT NOT NULL,\nD10 FLOAT NOT NULL,\nE12 NUMBER(20,0) NOT NULL,\nE13 NUMBER(28,0) NOT NULL,\nE14 NUMBER(30,0) NOT NULL,\nE15 NUMBER(38,0) NOT NULL,\nE17 NUMBER(38,2) NOT NULL,\nF1 INTERVAL YEAR(8) TO MONTH NOT NULL,\nF2 INTERVAL DAY(8) TO SECOND(9) NOT NULL,\nF3 TIMESTAMP WITH TIME ZONE NOT NULL,\nF4 TIMESTAMP NOT NULL,\nF5 TIMESTAMP WITH TIME ZONE NOT NULL,\nF6 INTERVAL DAY(2) TO SECOND(6) NOT NULL,\nH1 RAW(1) NOT NULL,\nH2 RAW(2) NOT NULL,\nH3 RAW(53) NOT NULL,\nH5 RAW(2000) NOT NULL,\nH6 RAW(10) NOT NULL,\nZ1 TIMESTAMP NOT NULL,\nZ2 TIMESTAMP NOT NULL,\nZ3 TIMESTAMP NOT NULL,\nZ5 TIMESTAMP NOT NULL,\nI1 TIMESTAMP WITH TIME ZONE NOT NULL,\nI2 TIMESTAMP WITH TIME ZONE NOT NULL,\nI3 TIMESTAMP WITH TIME ZONE NOT NULL,\nI5 TIMESTAMP WITH TIME ZONE NOT NULL,\nI6 TIMESTAMP WITH TIME ZONE NOT NULL,\nI7 TIMESTAMP WITH TIME ZONE NOT NULL,\nW1 CHAR(100) NOT NULL,\nW2 CHAR(1) NOT NULL,\nW3 CHAR(1) NOT NULL,\nW5 NVARCHAR2(200) NOT NULL,\nW6 NCHAR(1) NOT NULL,\nW7 NCHAR(200) NOT NULL,\nW8 NUMBER(38,0) NOT NULL,\nW9 NUMBER(38,0) NOT NULL,\nW15 INTERVAL YEAR TO MONTH NOT NULL,\nW11 BINARY_DOUBLE NOT NULL,\nW13 BINARY_FLOAT NOT NULL,\nW16 UROWID NOT NULL,\nW17 UROWID NOT NULL,\nCOLUMN2 FLOAT NULL,\nCOLUMN3 FLOAT NULL)",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "dblink",
          "syntax": "dblink\nabc@xyz",
          "originExample": "",
          "regexp": "(\\bcreate\\s*database\\s*link|dblink)",
          "recommend": "暂不支持，可尝试使用FEDERATED引擎",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "存储过程返回游标结果集\n<select id=\"testProcedureDao\" parameterType=\"map\"  statementType=\"CALLABLE\"  >\n         call runcrm.p_act_stk_info(\n              #{map.id,mode=IN,jdbcType=INTEGER},         \n              #{map.cursor,mode=OUT,jdbcType=CURSOR,resultMap=cursorMap\n                })\n</select>",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROWID",
          "originExample": "",
          "regexp": "\\b(rowid|urowid|rownum)\\b",
          "recommend": "暂不支持，rowid在oracle中是一个伪列，在mysql有类似的_rowid",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "记录数据库中正在执行的模块或事务的名称，以便后续跟踪模块的性能以及调试使用。",
          "syntax": "dbms_application_info",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查看参数",
          "syntax": "show parameter xxx",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "OID",
          "syntax": "oid",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "CONCURRENT",
          "originExample": "SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COLUMN_VALUE",
          "originExample": "",
          "regexp": "\\bCOLUMN_VALUE\\b",
          "recommend": "需手动改写 (SELECT xxx) AS COLUMN_VALUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNUMBER\\b",
          "recommend": "专用特性，如需可以考虑int、bigint、decimal的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBFILE\\b",
          "recommend": "专用特性，如需可以考虑VARCHAR的数据类型等",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "专用特性，如需可以考虑REAL的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bBINARY_DOUBLE\\b",
          "recommend": "专用特性，如需可以考虑DOUBLE PRECISION的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\b(LONG|LONG\\s+RAW)\\b",
          "recommend": "专用特性，如需可以考虑TEXT的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\braw\\s*\\(",
          "recommend": "专用特性，如需可以考虑bytea的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bREAL\\b",
          "recommend": "专用特性，如需可以考虑DOUBLE PRECISION的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bXMLTYPE\\b",
          "recommend": "专用特性，如需可以考虑XML的数据类型等",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bblob\\b",
          "recommend": "专用特性，如需可以使用LONGBLOB等替换",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bNVARCHAR2\\b",
          "recommend": "专有特性，如需可以考虑varchar的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "",
          "originExample": "",
          "regexp": "\\bVARCHAR2\\b",
          "recommend": "专有特性，如需可以考虑varchar的数据类型等",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "int(9)",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "set define on",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "  AND A.JYSJC > = TO_CHAR(TO_TIMESTAMP(",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    },
    "GaussDB-Oracle": {
      "DML": [
        {
          "desc": "合并更新",
          "syntax": "MERGE INTO",
          "originExample": "-- MERGE INTO\nDROP TABLE scan_test.employees_merge;\nCREATE TABLE scan_test.employees_merge (  \n    emp_id NUMBER PRIMARY KEY,  \n    emp_name VARCHAR2(100),  \n    salary NUMBER  \n);\nINSERT INTO scan_test.employees_merge (emp_id, emp_name, salary) VALUES (1, 'Alice', 5000);  \nINSERT INTO scan_test.employees_merge (emp_id, emp_name, salary) VALUES (2, 'Bob', 6000);  \nINSERT INTO scan_test.employees_merge (emp_id, emp_name, salary) VALUES (3, 'Charlie', 7000);\n\nDROP TABLE scan_test.temp_employees_merge;\nCREATE TABLE scan_test.temp_employees_merge (  \n    emp_id NUMBER,  \n    new_salary NUMBER  \n);  \nINSERT INTO scan_test.temp_employees_merge (emp_id, new_salary) VALUES (1, 5500);  \nINSERT INTO scan_test.temp_employees_merge (emp_id, new_salary) VALUES (2, NULL); -- Bob的工资没有变化，我们设置为NULL  \nINSERT INTO scan_test.temp_employees_merge (emp_id, new_salary) VALUES (4, 8000); -- 新员工David\n\nMERGE INTO scan_test.employees_merge e  \nUSING scan_test.temp_employees_merge te  \nON (e.emp_id = te.emp_id)  \nWHEN MATCHED THEN  \n    UPDATE SET e.salary = te.new_salary\n    WHERE te.new_salary IS NOT NULL\nWHEN NOT MATCHED THEN  \n    INSERT (emp_id, emp_name, salary) VALUES (te.emp_id, 'New Employee', te.new_salary) WHERE te.new_salary IS NOT NULL;\n\nMERGE INTO scan_test.employees_merge e  \nUSING (SELECT * FROM scan_test.temp_employees_merge) te  \nON (e.emp_id = te.emp_id)  \nWHEN MATCHED THEN  \n    UPDATE SET e.salary = te.new_salary\n    WHERE te.new_salary IS NOT NULL\n    DELETE WHERE (te.new_salary < 6000)\nWHEN NOT MATCHED THEN  \n    INSERT (emp_id, emp_name, salary) VALUES (te.emp_id, 'New Employee', te.new_salary) WHERE te.new_salary IS NOT NULL;\n\nSELECT * FROM scan_test.employees_merge;",
          "regexp": "\\bMERGE\\s+INTO\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((\\w+|\\\"\\w+\\\")\\s+)?USING\\s*[\\s\\S]+?\\bWHEN\\s+MATCHED\\s+THEN\\s+[\\s\\S]+?\\bDELETE\\s+WHERE",
          "recommend": "GaussDB中MERGE INTO 的 WHEN MATCHED THEN UPDATE 子句中不支持 DELETE WHERE 用法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE",
          "originExample": "DROP TABLE scan_test.employees_update_1;\nCREATE TABLE scan_test.employees_update_1 (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2) DEFAULT 40000\n);\nINSERT INTO scan_test.employees_update_1 (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (1, 'John', 'Doe', 'blank@example.com', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 100);  \nINSERT INTO scan_test.employees_update_1 (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (2, 'Jane', 'Smith', 'blank@example.com', TO_DATE('2022-05-15', 'YYYY-MM-DD'), 200);  \nINSERT INTO scan_test.employees_update_1 (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (3, 'Bob', 'Johnson', 'blank@example.com', TO_DATE('2021-10-20', 'YYYY-MM-DD'), 300);  \n\nDROP TABLE scan_test.employees_update_2;\nCREATE TABLE scan_test.employees_update_2 (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nINSERT INTO scan_test.employees_update_2 (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 50000);  \nINSERT INTO scan_test.employees_update_2 (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (2, 'Jane', 'Smith', 'jane.smith@example.com', TO_DATE('2022-05-15', 'YYYY-MM-DD'), 60000);  \nINSERT INTO scan_test.employees_update_2 (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (3, 'Bob', 'Johnson', 'bob.johnson@example.com', TO_DATE('2021-10-20', 'YYYY-MM-DD'), 55000); \n\nUPDATE scan_test.employees_update_1 emp_u_1\n\tSET hire_date = SYSDATE,\n\t\t(email) = (SELECT email\n\t\t\tFROM scan_test.employees_update_2 emp_u_2\n\t\t\tWHERE emp_u_1.employee_id = emp_u_2.employee_id),\n\t\tsalary = DEFAULT\n\tWHERE emp_u_1.employee_id > 1;\n\nSELECT * FROM scan_test.employees_update_1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新分区数据",
          "syntax": "UPDATE RETURNING",
          "originExample": "-- RETURNING\nDECLARE  \n    v_emp_name VARCHAR2(100);  \n    v_email VARCHAR2(100);\n    v_hire_date DATE;\n    v_salary NUMBER(10, 2);\nBEGIN  \n    UPDATE scan_test.employees_update_1 emp_u_1\n\tSET hire_date = SYSDATE,\n\t\t(email) = (SELECT email\n\t\t\tFROM scan_test.employees_update_2 emp_u_2\n\t\t\tWHERE emp_u_1.employee_id = emp_u_2.employee_id),\n\t\tsalary = DEFAULT\n\tWHERE emp_u_1.employee_id = 1\n    RETURNING first_name || last_name, email, hire_date, salary\n   \tINTO v_emp_name, v_email, v_hire_date, v_salary;\n\n--    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name || ', Salary: ' || v_salary || ', Email: ' || v_email || ', Hire Date: ' || v_hire_date);  \n    -- GaussDB中使用下句\n    DBE_OUTPUT.PRINT_LINE('Employee Name: ' || v_emp_name || ', Salary: ' || v_salary || ', Email: ' || v_email || ', Hire Date: ' || v_hire_date);\nEND;\n\nSELECT * FROM scan_test.employees_update_1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除数据",
          "syntax": "DELETE [FROM] ...",
          "originExample": "DROP TABLE scan_test.employees_delete;\nCREATE TABLE scan_test.employees_delete (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nINSERT INTO scan_test.employees_delete (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 50000);  \nINSERT INTO scan_test.employees_delete (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (2, 'Jane', 'Smith', 'jane.smith@example.com', TO_DATE('2022-05-15', 'YYYY-MM-DD'), 60000);  \nINSERT INTO scan_test.employees_delete (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (3, 'Bob', 'Johnson', 'bob.johnson@example.com', TO_DATE('2021-10-20', 'YYYY-MM-DD'), 55000);  \n\nDELETE FROM scan_test.employees_delete emp_del;\nDELETE scan_test.employees_delete emp_del;\nDELETE scan_test.employees_delete emp_del where salary > 55000;\n\n-- VIEW\nDROP VIEW scan_test.v_delete;\nCREATE VIEW scan_test.v_delete AS SELECT * FROM scan_test.employees_delete;\n\nDELETE FROM scan_test.v_delete;\nDELETE scan_test.v_delete;",
          "regexp": "",
          "recommend": "删除视图会有一些限制，但正则无法区分表和视图，暂不支持扫描",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE RETURNING",
          "originExample": "DECLARE  \n    v_emp_name VARCHAR2(100);  \n    v_salary NUMBER(10, 2);\nBEGIN  \n    DELETE FROM scan_test.employees_delete  \n    WHERE salary > 55000 \n    RETURNING first_name || last_name, salary INTO v_emp_name, v_salary;\n\n--    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name || ', Salary: ' || v_salary);  \n    DBE_OUTPUT.PRINT_LINE('Employee Name: ' || v_emp_name || ', Salary: ' || v_salary);\nEND;\n/",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DELETE FROM table_name@link",
          "originExample": "DROP DATABASE LINK uni_ora;\n-- Oracll 使用test用户\nCREATE DATABASE LINK uni_ora CONNECT TO test IDENTIFIED BY test123456 USING 'ORCL';\n-- GaussDB\nCREATE DATABASE LINK uni_ora CONNECT TO 'root' IDENTIFIED BY '****' USING (HOST '10.20.30.***', PORT '***', DBNAME 'uniq_oracle');\nDELETE FROM scan_test.employees_delete@uni_ora;\nDELETE FROM scan_test.v_delete@uni_ora;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "WITH ... DELETE ...",
          "originExample": "DELETE scan_test.employees_delete emp_del\nWHERE (salary) in (\n\tSELECT salary\n\tFROM scan_test.employees_delete\n\tWHERE employee_id = 1\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据",
          "syntax": "INSERT ... SELECT",
          "originExample": "TRUNCATE scan_test.employees_insert;\nINSERT INTO scan_test.employees_insert SELECT * FROM scan_test.employees_delete;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据",
          "syntax": "INSERT",
          "originExample": "DROP TABLE scan_test.employees_insert;\nCREATE TABLE scan_test.employees_insert (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nINSERT INTO scan_test.employees_insert (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 50000);  \nINSERT INTO scan_test.employees_insert (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (2, 'Jane', 'Smith', 'jane.smith@example.com', TO_DATE('2022-05-15', 'YYYY-MM-DD'), 60000);  \nINSERT INTO scan_test.employees_insert (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (3, 'Bob', 'Johnson', 'bob.johnson@example.com', TO_DATE('2021-10-20', 'YYYY-MM-DD'), 55000);\n\nSELECT * FROM scan_test.employees_insert;\n\n-- 分区表\nDROP TABLE scan_test.employees_list_insert_part;\nCREATE TABLE scan_test.employees_list_insert_part (  \n    employee_id   NUMBER PRIMARY KEY,  \n    employee_name VARCHAR2(100),  \n    department_id NUMBER  \n)  \nPARTITION BY LIST (department_id)  \n(  \n    PARTITION emp_sales VALUES (10, 20),\n    PARTITION emp_hr VALUES (30, 40),\n    PARTITION emp_other VALUES (DEFAULT)\n);  \n\nINSERT INTO scan_test.employees_list_insert_part (employee_id, employee_name, department_id) VALUES (1, 'John Doe', 10);\nINSERT INTO scan_test.employees_list_insert_part (employee_id, employee_name, department_id) VALUES (2, 'Jane Smith', 30);\nINSERT INTO scan_test.employees_list_insert_part (employee_id, employee_name, department_id) VALUES (3, 'Bob Johnson', 50);\n\n-- 查询特定分区中的数据\nSELECT * FROM scan_test.employees_list_insert_part PARTITION (emp_sales);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据",
          "syntax": "INSERT ... RETURNING ...",
          "originExample": "-- RETURNING\nDECLARE  \n    v_emp_name VARCHAR2(100);  \n    v_salary NUMBER(10, 2);\nBEGIN  \n    INSERT INTO scan_test.employees_insert (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (4, 'Jay', 'Chou', 'jay.chou@example.com', TO_DATE('2023-12-10', 'YYYY-MM-DD'), 70000)\n    RETURNING first_name || last_name, salary INTO v_emp_name, v_salary;\n\n--    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name || ', Salary: ' || v_salary);  \n    -- GaussDB中使用下句\n    DBE_OUTPUT.PRINT_LINE('Employee Name: ' || v_emp_name || ', Salary: ' || v_salary);\nEND;\n/",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据",
          "syntax": "INSERT ALL",
          "originExample": "-- INSERT ALL\nDROP TABLE scan_test.employees_insert_all;\nCREATE TABLE scan_test.employees_insert_all (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nTRUNCATE TABLE scan_test.employees_insert_all;\nTRUNCATE TABLE scan_test.employees_insert;\nINSERT ALL\n\tINTO scan_test.employees_insert_all (employee_id, first_name, last_name, email, hire_date, salary)\n\tVALUES (emp_id, f_name, l_name, eml, h_date, sal)\n\tINTO scan_test.employees_insert (employee_id, first_name, last_name, email, hire_date, salary)\n\tVALUES (emp_id, f_name, l_name, eml, h_date, sal)\n\tSELECT emp_id, f_name, l_name, eml, h_date, sal FROM scan_test.employees_delete;\n\nSELECT * FROM scan_test.employees_insert_all;\nSELECT * FROM scan_test.employees_insert;",
          "regexp": "\\bINSERT\\s+ALL\\s+INTO",
          "recommend": "GaussDB不支持 INSERT ALL 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "插入数据",
          "syntax": "INSERT ALL|FIRST WHEN",
          "originExample": "TRUNCATE TABLE scan_test.employees_insert_all;\nTRUNCATE TABLE scan_test.employees_insert;\nINSERT FIRST\n\tWHEN 1=1 THEN\n\tINTO scan_test.employees_insert_all (employee_id, first_name, last_name, email, hire_date, salary)\n\tVALUES (emp_id, f_name, l_name, eml, h_date, sal)\n\tWHEN sal > 50000 THEN\n\tINTO scan_test.employees_insert (employee_id, first_name, last_name, email, hire_date, salary)\n\tVALUES (emp_id, f_name, l_name, eml, h_date, sal)\n\tSELECT employee_id emp_id, first_name f_name, last_name l_name, email eml, hire_date h_date, salary sal FROM scan_test.employees_delete;",
          "regexp": "\\bINSERT\\s+((ALL|FIRST)\\s+)?WHEN",
          "recommend": "GaussDB不支持 INSERT ... WHEN ... 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "更新数据",
          "syntax": "UPDATE ... PARTITION",
          "originExample": "-- UPDATE 分区\nDROP TABLE scan_test.employees_list_update;\nCREATE TABLE scan_test.employees_list_update (  \n    employee_id   NUMBER PRIMARY KEY,  \n    employee_name VARCHAR2(100),  \n    department_id NUMBER,\n    salary        NUMBER(10, 2) DEFAULT 500\n)  \nPARTITION BY LIST (department_id)  \n(  \n    PARTITION emp_sales VALUES (10, 20),\n    PARTITION emp_hr VALUES (30, 40),\n    PARTITION emp_other VALUES (DEFAULT)\n);  \n\nINSERT INTO scan_test.employees_list_update (employee_id, employee_name, department_id, salary) VALUES (1, 'John Doe', 10, 1000);\nINSERT INTO scan_test.employees_list_update (employee_id, employee_name, department_id, salary) VALUES (2, 'Jane Smith', 30, 2000);\nINSERT INTO scan_test.employees_list_update (employee_id, employee_name, department_id, salary) VALUES (3, 'Bob Johnson', 50, 3000);\n\nSELECT * FROM scan_test.employees_list_update PARTITION (emp_sales);\n\nUPDATE scan_test.employees_list_update PARTITION (emp_sales) SET salary = DEFAULT WHERE employee_id > 0;\n\nSELECT * FROM scan_test.employees_list_update PARTITION (emp_sales);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "DQL": [
        {
          "desc": "dual查询",
          "syntax": "DUAL",
          "originExample": "select 1 from dual;\nselect sysdate from dual;",
          "regexp": "\\bDUAL\\b",
          "recommend": "不支持DUAL伪表，可使用SYS_DUMMY代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "常规普通查询",
          "syntax": "SELECT",
          "originExample": "select * from scan_test.departments_with;\nselect * from scan_test.employees_with;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁",
          "syntax": "select from for update",
          "originExample": "select * from scan_test.departments_with for update;\nselect * from scan_test.departments_with for update nowait;\nselect * from scan_test.departments_with for update wait 1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "查询加锁到列",
          "syntax": "select … for update of xxx",
          "originExample": "select * from scan_test.departments_with d, scan_test.employees_with e for update of e;",
          "regexp": "",
          "recommend": "GaussDB支持 of tablename，但不支持锁列，正则无法区分暂不扫描",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "内连接",
          "syntax": "INNER JOIN",
          "originExample": "-- INNER JOIN \nSELECT   \n    d.department_id,  \n    d.department_name,  \n    e.employee_id,  \n    e.first_name || ' ' || e.last_name,  \n    e.salary  \nFROM   \n    scan_test.departments_with d  \nINNER JOIN   \n    scan_test.employees_with e ON d.department_id = e.department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "笛卡尔乘积",
          "syntax": "CROSS JOIN",
          "originExample": "-- CROSS JOIN \nSELECT   \n    d.department_id,  \n    d.department_name,  \n    e.employee_id,  \n    e.first_name || ' ' || e.last_name,  \n    e.salary  \nFROM   \n    scan_test.departments_with d  \nCROSS JOIN   \n    scan_test.employees_with e\nORDER BY   \n    d.department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "左连接",
          "syntax": "LEFT JOIN",
          "originExample": "-- LEFT JOIN \nSELECT   \n    d.department_id,  \n    d.department_name,  \n    e.employee_id,  \n    e.first_name || ' ' || e.last_name,  \n    e.salary  \nFROM   \n    scan_test.departments_with d  \nLEFT JOIN   \n    scan_test.employees_with e ON d.department_id = e.department_id\nORDER BY   \n    d.department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "右连接",
          "syntax": "RIGHT JOIN",
          "originExample": "-- RIGHT JOIN \nSELECT   \n    d.department_id,  \n    d.department_name,  \n    e.employee_id,  \n    e.first_name || ' ' || e.last_name,  \n    e.salary  \nFROM   \n    scan_test.departments_with d  \nRIGHT JOIN   \n    scan_test.employees_with e ON d.department_id = e.department_id\nORDER BY   \n    e.employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "EXISTS子查询",
          "syntax": "SELECT ... WHERE EXISTS (SELECT ...); ",
          "originExample": "SELECT d.department_id\nFROM scan_test.departments_with d\nWHERE EXISTS\n(SELECT e.department_id FROM scan_test.employees_with e WHERE d.department_id = e.department_id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "NOT EXISTS子查询",
          "syntax": "SELECT ... WHERE NOT EXISTS (SELECT ...); ",
          "originExample": "SELECT d.department_id\nFROM scan_test.departments_with d\nWHERE NOT EXISTS\n(SELECT e.department_id FROM scan_test.employees_with e WHERE d.department_id = e.department_id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "交集",
          "syntax": "INTERSECT",
          "originExample": "drop table scan_test.employees_union;\nCREATE TABLE scan_test.employees_union (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    department_id NUMBER,  \n    salary NUMBER,  \n    FOREIGN KEY (department_id) REFERENCES scan_test.departments_with(department_id)  \n);\nINSERT INTO scan_test.employees_union (employee_id, first_name, last_name, department_id, salary) VALUES (1, 'John', 'Doe', 10, 50000);  \nINSERT INTO scan_test.employees_union (employee_id, first_name, last_name, department_id, salary) VALUES (2, 'Jane', 'Smith', 20, 60000);\n\nSELECT * FROM scan_test.employees_with\nINTERSECT\nSELECT * FROM scan_test.employees_union;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集去重",
          "syntax": "UNION",
          "originExample": "SELECT * FROM scan_test.employees_with\nUNION\nSELECT * FROM scan_test.employees_union;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "并集不去重",
          "syntax": "UNION ALL",
          "originExample": "SELECT * FROM scan_test.employees_with\nUNION ALL\nSELECT * FROM scan_test.employees_union;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "差集",
          "syntax": "MINUS",
          "originExample": "SELECT * FROM scan_test.employees_with\nMINUS\nSELECT * FROM scan_test.employees_union;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "递归WITH CTE",
          "syntax": "WITH RECURSIVE CTE",
          "originExample": "CREATE TABLE scan_test.employees_recursive (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    manager_id NUMBER,  \n    CONSTRAINT fk_manager FOREIGN KEY (manager_id) REFERENCES scan_test.employees_recursive(employee_id)  \n);\n\nINSERT INTO scan_test.employees_recursive (employee_id, first_name, last_name, manager_id) VALUES (1, 'Alice', 'Smith', NULL); -- 没有经理，是CEO  \nINSERT INTO scan_test.employees_recursive (employee_id, first_name, last_name, manager_id) VALUES (2, 'Bob', 'Johnson', 1); -- Alice的下属  \nINSERT INTO scan_test.employees_recursive (employee_id, first_name, last_name, manager_id) VALUES (3, 'Charlie', 'Williams', 1); -- Alice的下属  \nINSERT INTO scan_test.employees_recursive (employee_id, first_name, last_name, manager_id) VALUES (4, 'David', 'Brown', 2); -- Bob的下属  \nINSERT INTO scan_test.employees_recursive (employee_id, first_name, last_name, manager_id) VALUES (5, 'Eve', 'Davis', 2); -- Bob的下属\n\nWITH RECURSIVE employee_hierarchy (employee_id, first_name, last_name, manager_id, level_num, path) AS (  \n    -- 基础情况：CEO没有经理  \n    SELECT employee_id, first_name, last_name, manager_id, 1 AS level_num, first_name || ' ' || last_name AS path  \n    FROM scan_test.employees_recursive  \n    WHERE manager_id IS NULL  \n    UNION ALL  \n    -- 递归情况：查询所有下属员工，并构建层级路径  \n    SELECT e.employee_id, e.first_name, e.last_name, e.manager_id, eh.level_num + 1, eh.path || ' > ' || e.first_name || ' ' || e.last_name  \n    FROM scan_test.employees_recursive e  \n    JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id  \n)  \nSELECT * FROM employee_hierarchy  \nORDER BY path;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "where in 不带括号",
          "syntax": "select * from t where id in '123';",
          "originExample": "SELECT   \n    d.department_id,  \n    d.department_name \nFROM   \n    scan_test.departments_with d\nWHERE \n    d.department_id in 10;",
          "regexp": "\\bWHERE\\s+[\\s\\S]+?\\s+(NOT\\s+)?IN\\b(?!\\s*\\()",
          "recommend": "不支持 WHERE [NOT] IN 后集合不带括号",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CROSS APPLY",
          "originExample": "CREATE TABLE Employees_cross_apply\n(\n    emp_id NUMBER,\n    emp_name VARCHAR2(100),\n    dept_id NUMBER\n);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (1, 'John Doe', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (2, 'Jane Smith', 2);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (3, 'Michael Johnson', 1);\n\nINSERT INTO Employees_cross_apply (emp_id, emp_name, dept_id)\nVALUES (4, 'Emily Davis', 2);\n\nCREATE TABLE Departments_cross_apply\n(\n    dept_id NUMBER,\n    dept_name VARCHAR2(100)\n);\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (1, 'Sales');\n\nINSERT INTO Departments_cross_apply (dept_id, dept_name)\nVALUES (2, 'Marketing');\n\nSELECT * FROM Employees_cross_apply CROSS APPLY Departments_cross_apply;\n\nSELECT e.emp_id, e.emp_name, d.dept_name\nFROM Employees_cross_apply e\nCROSS APPLY (SELECT dept_name FROM Departments_cross_apply WHERE dept_id = e.dept_id) d;",
          "regexp": "\\bCROSS\\s+APPLY\\b",
          "recommend": "不支持CROSS APPLY语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-层次查询伪列",
          "syntax": "CONNECT_BY_ISCYCLE",
          "originExample": "--CONNECT_BY_ISCYCLE\nCREATE TABLE scan_test.employees_connectbyiscycle (\n    emp_id NUMBER PRIMARY KEY,\n    emp_name VARCHAR2(100),\n    manager_id NUMBER,\n    FOREIGN KEY (manager_id) REFERENCES scan_test.employees_connectbyiscycle(emp_id)\n);\n\nINSERT INTO scan_test.employees_connectbyiscycle (emp_id, emp_name, manager_id) VALUES (1, 'Alice', NULL);\nINSERT INTO scan_test.employees_connectbyiscycle (emp_id, emp_name, manager_id) VALUES (2, 'Bob', 1);\nINSERT INTO scan_test.employees_connectbyiscycle (emp_id, emp_name, manager_id) VALUES (3, 'Charlie', 2);\n-- 创建一个循环引用  \nUPDATE scan_test.employees_connectbyiscycle SET manager_id = 1 WHERE emp_id = 3;\n\nSELECT emp_id, emp_name, LEVEL, CONNECT_BY_ISCYCLE AS is_cycle\nFROM scan_test.employees_connectbyiscycle\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR emp_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-层次查询伪列",
          "syntax": "CONNECT_BY_ISLEAF",
          "originExample": "-- CONNECT_BY_ISLEAF\nCREATE TABLE scan_test.employees_connectbyisleaf (  \n    emp_id NUMBER PRIMARY KEY,  \n    emp_name VARCHAR2(100),  \n    manager_id NUMBER,  \n    FOREIGN KEY (manager_id) REFERENCES scan_test.employees_connectbyisleaf(emp_id)\n);\n\nINSERT INTO scan_test.employees_connectbyisleaf (emp_id, emp_name, manager_id) VALUES (1, 'Alice', NULL);  \nINSERT INTO scan_test.employees_connectbyisleaf (emp_id, emp_name, manager_id) VALUES (2, 'Bob', 1);  \nINSERT INTO scan_test.employees_connectbyisleaf (emp_id, emp_name, manager_id) VALUES (3, 'Charlie', 1);  \nINSERT INTO scan_test.employees_connectbyisleaf (emp_id, emp_name, manager_id) VALUES (4, 'David', 2);  \n\nSELECT emp_id, emp_name, LEVEL, CONNECT_BY_ISLEAF AS is_leaf  \nFROM scan_test.employees_connectbyisleaf  \nSTART WITH manager_id IS NULL  \nCONNECT BY PRIOR emp_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-层次查询伪列",
          "syntax": "LEVEL",
          "originExample": "-- LEVEL\nCREATE TABLE scan_test.employees_level (  \n    emp_id NUMBER PRIMARY KEY,  \n    emp_name VARCHAR2(100),  \n    manager_id NUMBER,  \n    FOREIGN KEY (manager_id) REFERENCES scan_test.employees_level(emp_id)  \n);\n\nINSERT INTO scan_test.employees_level (emp_id, emp_name, manager_id) VALUES (1, 'Alice', NULL); -- 顶层管理者  \nINSERT INTO scan_test.employees_level (emp_id, emp_name, manager_id) VALUES (2, 'Bob', 1);      -- Alice的直接下属  \nINSERT INTO scan_test.employees_level (emp_id, emp_name, manager_id) VALUES (3, 'Charlie', 1);   -- Alice的直接下属  \nINSERT INTO scan_test.employees_level (emp_id, emp_name, manager_id) VALUES (4, 'David', 2);     -- Bob的直接下属  \nINSERT INTO scan_test.employees_level (emp_id, emp_name, manager_id) VALUES (5, 'Eve', 3);       -- Charlie的直接下属\n\nSELECT emp_id, emp_name, LEVEL  \nFROM scan_test.employees_level  \nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR emp_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-序列伪列",
          "syntax": "NEXTVAL",
          "originExample": "-- 序列伪列\nCREATE SEQUENCE employee_seq  \nSTART WITH 1  \nINCREMENT BY 1  \nNOMAXVALUE;\n\nCREATE TABLE scan_test.employees_nextval (  \n    emp_id NUMBER PRIMARY KEY,  \n    emp_name VARCHAR2(100),  \n    manager_id NUMBER,  \n    FOREIGN KEY (manager_id) REFERENCES scan_test.employees_nextval(emp_id)\n);\n\nINSERT INTO scan_test.employees_nextval (emp_id, emp_name, manager_id)  \nVALUES (employee_seq.NEXTVAL, 'Frank', 1);\nINSERT INTO scan_test.employees_nextval (emp_id, emp_name, manager_id)  \nVALUES (employee_seq.NEXTVAL, 'Bob', 1);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-序列伪列",
          "syntax": "CURRVAL",
          "originExample": "-- 接上一行例子\nSELECT employee_seq.CURRVAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-ROWNUM",
          "syntax": "ROWNUM",
          "originExample": "-- 例表employees_nextval见上\nselect * from scan_test.employees_nextval where rownum < 3;\nselect * from scan_test.employees_nextval where rownum <= 2;\nselect * from scan_test.employees_nextval where rownum = 1;\nselect * from scan_test.employees_nextval where emp_id < 3 and rownum < 3;\nselect emp_id, emp_name, rownum from scan_test.employees_nextval;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-ROWID",
          "syntax": "ROWID在SELECT FIELDS子句中",
          "originExample": "-- ROWID\nCREATE TABLE scan_test.employees_rowid (  \n    emp_id NUMBER PRIMARY KEY,  \n    emp_name VARCHAR2(100)  \n);  \n\nINSERT INTO scan_test.employees_rowid (emp_id, emp_name) VALUES (1, 'Alice');  \nINSERT INTO scan_test.employees_rowid (emp_id, emp_name) VALUES (2, 'Bob');  \nINSERT INTO scan_test.employees_rowid (emp_id, emp_name) VALUES (3, 'Charlie');\n\nSELECT ROWID, emp_id, emp_name FROM scan_test.employees_rowid;\n-- 正则用例\nSELECT emp_id , ROWID , emp_name FROM scan_test.employees_rowid;\nSELECT emp_id , emp_name , ROWID FROM scan_test.employees_rowid;\nSELECT ROWID FROM scan_test.employees_rowid;",
          "regexp": "\\bSELECT\\s+((\\w+|\\\"\\w+\\\")\\s*,\\s*)*ROWID\\s*,?\\s*((\\w+|\\\"\\w+\\\")\\s*,\\s*)*(\\w+|\\\"\\w+\\\")?\\s+FROM",
          "recommend": "不支持ROWID伪列",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "伪列-ROWID",
          "syntax": "ROWID在WHERE子句中",
          "originExample": "DELETE FROM scan_test.employees_rowid WHERE ROWID = 'AAAR2BAABAAA01AAB';\nDELETE FROM scan_test.employees_rowid where emp_id > 2 or ROWID = 'AAAR2BAABAAA01AAB';\nDELETE FROM scan_test.employees_rowid where ROWID = 'AAAR2BAABAAA01AAB' or emp_id > 2;",
          "regexp": "\\bWHERE\\s+[\\s\\S]*?\\bROWID\\b",
          "recommend": "不支持ROWID伪列",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DBA视图",
          "syntax": "dba/all/user_tables\ndba/all/user_objects\ndba/all/user_tab_privs\ndba/all/user_col_privs\ndba/all/user_indexes\ndba/all/user_tab_columns\ndba/all/user_col_comments\ndba/all/user_ind_columns\ndba/all/user_tab_comments",
          "originExample": "SELECT * FROM user_tables;\nSELECT * FROM user_objects;\nSELECT * FROM user_tab_privs;\nSELECT * FROM user_col_privs;\nSELECT * FROM user_indexes;\nSELECT * FROM user_tab_columns;\nSELECT * FROM user_col_comments;\nSELECT * FROM user_ind_columns;\nSELECT * FROM user_tab_comments;",
          "regexp": "\\b(user_tables|user_objects|user_tab_privs|user_col_privs|user_indexes|user_tab_columns|user_col_comments|user_ind_columns|user_tab_comments)\\b",
          "recommend": "不支持系统视图user_tables、user_objects、user_tab_privs、user_col_privs、user_indexes、user_tab_columns、user_col_comments、user_ind_columns、user_tab_comments",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "WITH子查询",
          "syntax": "WITH CTE",
          "originExample": "CREATE TABLE scan_test.departments_with (  \n    department_id NUMBER PRIMARY KEY,  \n    department_name VARCHAR2(50)  \n);  \n  \nCREATE TABLE scan_test.employees_with (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    department_id NUMBER,  \n    salary NUMBER,  \n    FOREIGN KEY (department_id) REFERENCES scan_test.departments_with(department_id)  \n);\n\n-- 插入部门数据  \nINSERT INTO scan_test.departments_with (department_id, department_name) VALUES (10, 'Finance');  \nINSERT INTO scan_test.departments_with (department_id, department_name) VALUES (20, 'HR');  \nINSERT INTO scan_test.departments_with (department_id, department_name) VALUES (30, 'IT');  \n  \n-- 插入员工数据  \nINSERT INTO scan_test.employees_with (employee_id, first_name, last_name, department_id, salary) VALUES (1, 'John', 'Doe', 10, 50000);  \nINSERT INTO scan_test.employees_with (employee_id, first_name, last_name, department_id, salary) VALUES (2, 'Jane', 'Smith', 20, 60000);  \nINSERT INTO scan_test.employees_with (employee_id, first_name, last_name, department_id, salary) VALUES (3, 'Bob', 'Johnson', 30, 70000);  \nINSERT INTO scan_test.employees_with (employee_id, first_name, last_name, department_id, salary) VALUES (4, 'Alice', 'Williams', 10, 80000);\n\nselect * from scan_test.departments_with;\nselect * from scan_test.employees_with;\n\nWITH department_totals AS (  \n    SELECT d.department_id, d.department_name, SUM(e.salary) AS total_salary  \n    FROM scan_test.departments_with d  \n    JOIN scan_test.employees_with e ON d.department_id = e.department_id  \n    GROUP BY d.department_id, d.department_name  \n)  \nSELECT *  \nFROM department_totals  \nWHERE total_salary > 60000;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "全连接",
          "syntax": "FULL JOIN",
          "originExample": "INSERT INTO scan_test.departments_with (department_id, department_name) VALUES (40, 'AA');  \nINSERT INTO scan_test.departments_with (department_id, department_name) VALUES (50, 'BB');  \nINSERT INTO scan_test.employees_with (employee_id, first_name, last_name, department_id, salary) VALUES (5, 'Jay', 'Chou', 10, 500000);\n\nSELECT   \n    d.department_id,  \n    d.department_name,  \n    e.employee_id,  \n    e.first_name || ' ' || e.last_name,  \n    e.salary  \nFROM   \n    scan_test.departments_with d  \nFULL JOIN   \n    scan_test.employees_with e ON d.department_id = e.department_id  \nORDER BY   \n    d.department_id, e.employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "外联用法",
          "syntax": "where ...(+)",
          "originExample": "SELECT   \n    d.department_id,  \n    d.department_name,  \n    e.employee_id,  \n    e.first_name || ' ' || e.last_name,  \n    e.salary  \nFROM   \n    scan_test.departments_with d,\n    scan_test.employees_with e\nWHERE \n    d.department_id = e.department_id(+);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "[ { { DISTINCT | UNIQUE } | ALL } ]",
          "originExample": "select distinct * from scan_test.departments_with;\nselect unique * from scan_test.departments_with;\nselect all * from scan_test.departments_with;",
          "regexp": "\\bSELECT(\\s*/\\*+[^/]+?\\*/)?\\s+UNIQUE",
          "recommend": "GaussDB不支持SELECT UNIQUE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONNECT BY ... START WITH ...",
          "originExample": "SELECT emp_id, emp_name, LEVEL\nFROM scan_test.employees_connectbyiscycle\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR emp_id = manager_id;\n\nSELECT emp_id, emp_name, LEVEL\nFROM scan_test.employees_connectbyiscycle\nCONNECT BY PRIOR emp_id = manager_id\nSTART WITH manager_id IS NULL;\n\nSELECT emp_id, emp_name, LEVEL\nFROM scan_test.employees_connectbyiscycle\nCONNECT BY PRIOR emp_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CONNECT BY ROWNUM",
          "originExample": "SELECT emp_id, emp_name, level, rownum\nFROM scan_test.employees_connectbyiscycle\nCONNECT BY rownum < 3;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GROUP BY [ROLLUP]",
          "originExample": "SELECT sum(salary) FROM scan_test.employees_with\ngroup by department_id;\n\nSELECT sum(salary) FROM scan_test.employees_with\ngroup by rollup(department_id);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "闪回查询",
          "syntax": "AS OF / VERSIONS BETWEEN ",
          "originExample": "SELECT * FROM scan_test.employees_with\nAS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '6' MINUTE);\n\nSELECT * FROM scan_test.employees_with\nVERSIONS between TIMESTAMP (SYSTIMESTAMP - INTERVAL '6' MINUTE) AND SYSTIMESTAMP;",
          "regexp": "\\b(AS\\s+OF\\s+(SCN|TIMESTAMP|PERIOD\\s+FOR))|(VERSIONS\\s+(BETWEEN|PERIOD\\s+FOR))",
          "recommend": "GaussDB不支持闪回查询",
          "isSupportUnisql": "",
          "level": ""
        }
      ],
      "DDL": [
        {
          "desc": "清空表数据",
          "syntax": "TRUNCATE TABLE",
          "originExample": "CREATE TABLE scan_test.employees_truncate (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nINSERT INTO scan_test.employees_truncate (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 50000);  \nINSERT INTO scan_test.employees_truncate (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (2, 'Jane', 'Smith', 'jane.smith@example.com', TO_DATE('2022-05-15', 'YYYY-MM-DD'), 60000);  \nINSERT INTO scan_test.employees_truncate (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (3, 'Bob', 'Johnson', 'bob.johnson@example.com', TO_DATE('2021-10-20', 'YYYY-MM-DD'), 55000);  \n\n-- TRUNCATE\nTRUNCATE TABLE scan_test.employees_truncate;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使能/禁用某个索引",
          "syntax": "CREATE INDEX idx USABLE/UNUSABLE",
          "originExample": "CREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) USABLE;\n\nCREATE INDEX idx_employees_salary ON scan_test.employees_index (salary) UNUSABLE;",
          "regexp": "\\bCREATE\\s+((UNIQUE|BITMAP)\\s+)?INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+ON\\s+[\\s\\S]+?\\b(USABLE|UNUSABLE)\\b",
          "recommend": "不支持 USABLE/UNUSABLE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "开启/禁用某个索引",
          "syntax": "ALTER INDEX idx USABLE/UNUSABLE",
          "originExample": "ALTER INDEX idx_employees_last_name UNUSABLE;\nALTER INDEX idx_employees_salary USABLE;",
          "regexp": "\\balter\\s+index\\s+(?:\\w+|\\\"\\w+\\\")(?:\\.(\\w+|\\\"\\w+\\\"))?\\s+\\b(enable|disable)\\b",
          "recommend": "不支持 USABLE/UNUSABLE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE INDEX",
          "originExample": "-- CREATE INDEX\nCREATE TABLE scan_test.employees_index (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nINSERT INTO scan_test.employees_index (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 50000);  \nINSERT INTO scan_test.employees_index (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (2, 'Jane', 'Smith', 'jane.smith@example.com', TO_DATE('2022-05-15', 'YYYY-MM-DD'), 60000);  \nINSERT INTO scan_test.employees_index (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (3, 'Bob', 'Johnson', 'bob.johnson@example.com', TO_DATE('2021-10-20', 'YYYY-MM-DD'), 55000);  \nCOMMIT;\n\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name);\nCREATE INDEX idx_employees_salary ON scan_test.employees_index (salary);\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name ASC);\nCREATE INDEX idx_employees_salary ON scan_test.employees_index (salary DESC);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE [ UNIQUE | BITMAP ] INDEX\n",
          "originExample": "CREATE UNIQUE INDEX idx_employees_last_name ON scan_test.employees_index (last_name);\n\nCREATE BITMAP INDEX idx_employees_salary ON scan_test.employees_index (salary);",
          "regexp": "\\bCREATE\\s+BITMAP\\s+INDEX\\s+",
          "recommend": "不支持创建位图索引",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "使用查询到的数据建立新表",
          "syntax": "CREATE  TABLE ... AS SELECT ...",
          "originExample": "CREATE TABLE scan_test.employees_AS as select * from scan_test.employees_index;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建临时表",
          "syntax": "CREATE [GLOBAL|PRIVATE] TEMPORARY TABLE",
          "originExample": "DROP TABLE scan_test.employees_temptab;\nCREATE GLOBAL TEMPORARY TABLE scan_test.employees_temptab (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n) on commit preserve rows;\nCREATE GLOBAL TEMPORARY TABLE scan_test.employees_temptab (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n) on commit delete rows;\nCREATE PRIVATE TEMPORARY TABLE scan_test.employees_temptab (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n) on commit preserve definition;",
          "regexp": "\\bCREATE\\s+PRIVATE\\s+TEMPORARY\\s+TABLE",
          "recommend": "GaussDB创建私有临时表时不支持 PRIVATE 关键字，可使用 LOCAL 代替",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名表",
          "syntax": "ALTER TABLE ... RENAME TO ...",
          "originExample": "ALTER TABLE scan_test.employees_alter_drop rename to employees_alter_drop_1;\nALTER TABLE scan_test.employees_alter_drop_1 rename to employees_alter_drop;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建路径对象",
          "syntax": "CREATE DIRECTORY",
          "originExample": "CREATE DIRECTORY mydir AS '/scratch/data/file_data';\n\nCREATE OR REPLACE DIRECTORY mydir SHARING = NONE AS '/scratch/data/file_data';\n\nCREATE OR REPLACE DIRECTORY mydir SHARING = METADATA AS '/scratch/data/file_data';",
          "regexp": "\\bCREATE\\s+(OR\\s+REPLACE\\s+)?DIRECTORY\\s+(\\w+|\\\"\\w+\\\")\\s+sharing\\s*=\\s*",
          "recommend": "GaussDB中 CREATE DIRECTORY 不支持SHARING选项",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE INDEX ... ON ... [LOGGING|NOLOGGING]",
          "originExample": "-- LOGGING|NOLOGGING\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) LOGGING;\nCREATE INDEX idx_employees_salary ON scan_test.employees_index (salary) NOLOGGING;",
          "regexp": "\\bCREATE\\s+((UNIQUE|BITMAP)\\s+)?INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+ON\\s+[\\s\\S]+?\\b(LOGGING|NOLOGGING|FILESYSTEM_LIKE_LOGGING)\\b",
          "recommend": "不支持 LOGGING、NOLOGGING、FILESYSTEM_LIKE_LOGGING 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE INDEX ... ON ... ONLINE",
          "originExample": "CREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) ONLINE;",
          "regexp": "\\bCREATE\\s+((UNIQUE|BITMAP)\\s+)?INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+ON\\s+[\\s\\S]+?\\bONLINE\\b",
          "recommend": "不支持 ONLILNE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE INDEX ... ON ... TABLESPACE ...",
          "originExample": "CREATE TABLESPACE IDX_ABC \n   DATAFILE 'IDX_ABC.dbf' SIZE 40M \n   ONLINE;\n-- GaussDB\nCREATE TABLESPACE IDX_ABC RELATIVE LOCATION 'tablespace/tablespace_1';\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) TABLESPACE IDX_ABC;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE INDEX ... ON ... COMPRESS/NOCOMPRESS/COMPRESS ADVANCED",
          "originExample": "-- COMPRESS\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) COMPRESS 1;\nCREATE INDEX idx_employees_salary ON scan_test.employees_index (salary) NOCOMPRESS;\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) COMPRESS ADVANCED LOW;",
          "regexp": "\\bCREATE\\s+((UNIQUE|BITMAP)\\s+)?INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+ON\\s+[\\s\\S]+?\\b(COMPRESS|NOCOMPRESS)\\b",
          "recommend": "不支持 COMPRESS、NOCOMPRESS 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE INDEX ... ON ... REVERSE",
          "originExample": "-- REVERSE\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) REVERSE;",
          "regexp": "\\bCREATE\\s+((UNIQUE|BITMAP)\\s+)?INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+ON\\s+[\\s\\S]+?\\bREVERSE\\b",
          "recommend": "不支持 REVERSE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建索引",
          "syntax": "CREATE INDEX ... ON ... PARALLEL/NOPARALLEL",
          "originExample": "-- PARALLEL\nCREATE INDEX idx_employees_last_name ON scan_test.employees_index (last_name) PARALLEL 1;\nCREATE INDEX idx_employees_salary ON scan_test.employees_index (salary) NOPARALLEL;",
          "regexp": "\\bCREATE\\s+((UNIQUE|BITMAP)\\s+)?INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+ON\\s+[\\s\\S]+?\\b(PARALLEL|NOPARALLEL)\\b",
          "recommend": "不支持 PARALLEL、NOPARALLEL 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建序列",
          "syntax": "CREATE SEQUENCE",
          "originExample": "-- CREATE SEQUENCE\nDROP SEQUENCE scan_test.customers_seq;\nCREATE SEQUENCE scan_test.customers_seq\n START WITH     1000\n INCREMENT BY   1\n maxvalue 9999\n minvalue 1000\n cycle\n cache 100\n order\n GLOBAL;\n\nCREATE SEQUENCE scan_test.customers_seq\n START WITH     1000\n INCREMENT BY   1\n nomaxvalue\n nominvalue\n nocycle\n nocache\n noorder;",
          "regexp": "\\bCREATE\\s+SEQUENCE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+[\\s\\S]*?\\b(ORDER|NOORDER|GLOBAL)\\b",
          "recommend": "GaussDB中 CREATE SEQUENCE 不支持 ORDER、NOORDER、GLOBAL 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建同义词",
          "syntax": "CREATE SYNONYM",
          "originExample": "-- CREATE SYNONYM\nDROP SYNONYM emp_idx;\nCREATE SYNONYM emp_idx FOR scan_test.employees_index;\nCREATE OR REPLACE SYNONYM emp_idx FOR scan_test.employees_index;\n\nCREATE EDITIONABLE SYNONYM emp_idx FOR scan_test.employees_index;\n\nCREATE PUBLIC SYNONYM emp_idx FOR scan_test.employees_index;\n\nDROP SYNONYM scan_test.emp_idx;\nCREATE SYNONYM scan_test.emp_idx FOR scan_test.employees_index;\n\ndrop database link uni_ora;\nCREATE DATABASE LINK uni_ora CONNECT TO test IDENTIFIED BY test123456 USING 'ORCL';\nCREATE SYNONYM emp_idx FOR scan_test.employees_index@uni_ora;",
          "regexp": "\\bCREATE\\s+(OR\\s+REPLACE\\s+)?(((EDITIONABLE|NONEDITIONABLE)\\s+(PUBLIC\\s+)?)|((EDITIONABLE|NONEDITIONABLE\\s+)?PUBLIC\\s+))SYNONYM",
          "recommend": "GaussDB中 CREATE SYNONYM 不支持 EDITIONABLE、NONEDITIONABLE 和 PUBLIC 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建表",
          "syntax": "CREATE TABLE COLUMN定义",
          "originExample": "-- GENERATED ALWAYS AS\nDROP TABLE scan_test.employees_vircol;\nCREATE TABLE scan_test.employees_vircol (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2),\n    half_salary NUMBER GENERATED ALWAYS AS (salary / 2)\n);\n\nINSERT INTO scan_test.employees_vircol (employee_id, first_name, last_name, email, hire_date, salary)   \nVALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 50000);\n\nselect * from scan_test.employees_vircol;\n\n-- INVISIBLE\nDROP TABLE scan_test.employees_invisible;\nCREATE TABLE scan_test.employees_invisible (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2),\n    invisi_col NUMBER INVISIBLE\n);\n\n-- DEFAULT\nDROP SEQUENCE scan_test.employee_seq;\nCREATE SEQUENCE scan_test.employee_seq  \nSTART WITH 1  \nINCREMENT BY 1  \nNOMAXVALUE;\n\nDROP TABLE scan_test.employees_defaultseq;\nCREATE TABLE scan_test.employees_defaultseq (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2),\n    seq_col NUMBER DEFAULT scan_test.employee_seq.CURRVAL,\n    def_col NUMBER DEFAULT 1\n);",
          "regexp": "\\bCREATE\\s+((GLOBAL|PRIVATE)\\s+TEMPORARY)?TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*\\([\\s\\S]+?\\b(IN)?VISIBLE\\b[\\s\\S]*?\\)",
          "recommend": "列定义不支持 VISIBLE/INVISIBLE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建表",
          "syntax": "CREATE TABLE COLUMN 身份 IDENTITY",
          "originExample": "DROP TABLE scan_test.employees_identity;\nCREATE TABLE scan_test.employees_identity (  \n    employee_id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2)\n);\nDROP TABLE scan_test.employees_identity_2;\nCREATE TABLE scan_test.employees_identity_2 (\n    employee_id NUMBER GENERATED AS IDENTITY (START WITH 10 INCREMENT BY 10),\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2)\n);\nDROP TABLE scan_test.employees_identity_3;\nCREATE TABLE scan_test.employees_identity_3 (\n    employee_id NUMBER GENERATED BY DEFAULT AS IDENTITY,  \n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2)\n);\nDROP TABLE scan_test.employees_identity_4;\nCREATE TABLE scan_test.employees_identity_4 (  \n    employee_id NUMBER GENERATED ALWAYS AS IDENTITY (\n\t    START WITH 1\n\t    INCREMENT BY 1\n\t    maxvalue 9999\n\t \tminvalue 1\n\t \tcycle\n\t \tcache 100\n\t \torder\n \t),\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2)\n);\nDROP TABLE scan_test.employees_identity_5;\nCREATE TABLE scan_test.employees_identity_5 (  \n    employee_id NUMBER GENERATED ALWAYS AS IDENTITY (\n\t    START WITH 1\n\t    INCREMENT BY 1\n\t\t nomaxvalue\n\t\t nominvalue\n\t\t nocycle\n\t\t nocache\n\t\t noorder\n \t),\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    email VARCHAR2(100),\n    hire_date DATE,\n    salary NUMBER(10, 2)\n);",
          "regexp": "\\bCREATE\\s+((GLOBAL|PRIVATE)\\s+TEMPORARY)?TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*\\([\\s\\S]+?\\bIDENTITY\\s*\\([^\\)]+?\\b(ORDER|NOORDER)\\b[^\\)]*?\\)",
          "recommend": "列定义 IDNENTITY 中不支持 ORDER、NOORDER 项",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建HASH分区表",
          "syntax": "CREATE TABLE ... PARTITION BY HASH",
          "originExample": "CREATE TABLE scan_test.sales_hash (  \n    sale_id       NUMBER PRIMARY KEY,  \n    product_id    NUMBER,  \n    sale_date     DATE,  \n    sale_amount   NUMBER(10,2)  \n)  \nPARTITION BY HASH (sale_id)  \n(  \n    PARTITION sales_part1,  \n    PARTITION sales_part2,  \n    PARTITION sales_part3,  \n    PARTITION sales_part4  \n);  \n\nINSERT INTO scan_test.sales_hash (sale_id, product_id, sale_date, sale_amount) VALUES (1, 100, SYSDATE, 100.50);  \nINSERT INTO scan_test.sales_hash (sale_id, product_id, sale_date, sale_amount) VALUES (2, 200, SYSDATE, 200.75);  \nINSERT INTO scan_test.sales_hash (sale_id, product_id, sale_date, sale_amount) VALUES (3, 300, SYSDATE, 220.15);  \nINSERT INTO scan_test.sales_hash (sale_id, product_id, sale_date, sale_amount) VALUES (4, 400, SYSDATE, 300.75);  \nINSERT INTO scan_test.sales_hash (sale_id, product_id, sale_date, sale_amount) VALUES (5, 500, SYSDATE, 500.75);  \n\n-- 查询分区中的数据\nSELECT * FROM scan_test.sales_hash PARTITION (sales_part4);\n\nCREATE TABLE scan_test.sales_hash_2 (  \n    sale_id       NUMBER PRIMARY KEY,  \n    product_id    NUMBER,  \n    sale_date     DATE,  \n    sale_amount   NUMBER(10,2)  \n)  \nPARTITION BY HASH (sale_id) PARTITIONS 5;\nINSERT INTO scan_test.sales_hash_2 (sale_id, product_id, sale_date, sale_amount) VALUES (1, 100, SYSDATE, 100.50);  \nINSERT INTO scan_test.sales_hash_2 (sale_id, product_id, sale_date, sale_amount) VALUES (2, 200, SYSDATE, 200.75);\n\nSELECT * FROM scan_test.sales_hash_2;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建RANGE分区表",
          "syntax": "CREATE TABLE ... PARTITION BY RANGE",
          "originExample": "-- RANGE分区\nCREATE TABLE scan_test.orders_range (\n    order_id      NUMBER PRIMARY KEY,\n    order_amount  NUMBER(10,2),\n    order_date    DATE\n)\nPARTITION BY RANGE (order_amount)\n(\n    PARTITION orders_low VALUES LESS THAN (100),\n    PARTITION orders_medium VALUES LESS THAN (500),\n    PARTITION orders_high VALUES LESS THAN (MAXVALUE)\n);\n\nINSERT INTO scan_test.orders_range (order_id, order_amount, order_date) VALUES (1, 50, TO_DATE('2023-01-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.orders_range (order_id, order_amount, order_date) VALUES (2, 250, TO_DATE('2023-02-15', 'YYYY-MM-DD'));\nINSERT INTO scan_test.orders_range (order_id, order_amount, order_date) VALUES (3, 750, TO_DATE('2023-03-30', 'YYYY-MM-DD'));\n\n-- 查询特定分区中的数据\nSELECT * FROM scan_test.orders_range;\nSELECT * FROM scan_test.orders_range PARTITION (orders_medium);\nSELECT * FROM scan_test.orders_range PARTITION (orders_high);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建LIST分区表",
          "syntax": "CREATE TABLE ... PARTITION BY LIST",
          "originExample": "-- LIST分区\nCREATE TABLE scan_test.employees_list (  \n    employee_id   NUMBER PRIMARY KEY,  \n    employee_name VARCHAR2(100),  \n    department_id NUMBER  \n)  \nPARTITION BY LIST (department_id)  \n(  \n    PARTITION emp_sales VALUES (10, 20),\n    PARTITION emp_hr VALUES (30, 40),\n    PARTITION emp_other VALUES (DEFAULT)\n);  \n\nINSERT INTO scan_test.employees_list (employee_id, employee_name, department_id) VALUES (1, 'John Doe', 10);\nINSERT INTO scan_test.employees_list (employee_id, employee_name, department_id) VALUES (2, 'Jane Smith', 30);\nINSERT INTO scan_test.employees_list (employee_id, employee_name, department_id) VALUES (3, 'Bob Johnson', 50);\n\n-- 查询特定分区中的数据\nSELECT * FROM scan_test.employees_list PARTITION (emp_sales);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "物化视图",
          "syntax": "CREATE MATERIALIZED VIEW",
          "originExample": "CREATE MATERIALIZED VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;",
          "regexp": "\\bCREATE\\s+MATERIALIZED\\s+VIEW\\s+",
          "recommend": "GaussDB不支持物化视图",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建用户",
          "syntax": "CREATE USER",
          "originExample": "CREATE USER peter_fitch IDENTIFIED GLOBALLY AS 'AZURE_USER=peter.fitch@example.com';\n\nCREATE USER sidney \n    IDENTIFIED BY out_standing1 \n    DEFAULT TABLESPACE example \n    QUOTA 10M ON example \n    TEMPORARY TABLESPACE temp\n    QUOTA 5M ON system \n    PROFILE app_user \n    PASSWORD EXPIRE;\n\nCREATE USER app_user1\n   IDENTIFIED EXTERNALLY\n   DEFAULT TABLESPACE example\n   QUOTA 5M ON example\n   PROFILE app_user;",
          "regexp": "\\bCREATE\\s+USER\\s+\\w+\\s+((ON\\s+AUTHENTICATION)|(IDENTIFIED\\s+(EXTERNALLY|GLOBALLY|(BY\\s+[\\s\\S]+?\\s+(HTTP|DIGEST|DEFAULT|LOCAL|TEMPORARY|QUOTA|PROFILE|PASSWORD|ACCOUNT|ENABLE|CONTAINER)))))",
          "recommend": "GaussDB中 CREATE USER 语法不同",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建角色",
          "syntax": "CREATE ROLE",
          "originExample": "CREATE ROLE widget_sales_role IDENTIFIED GLOBALLY AS 'AZURE_ROLE=WidgetManagerGroup';\nCREATE ROLE dw_manager IDENTIFIED BY warehouse; \nCREATE ROLE warehouse_user IDENTIFIED GLOBALLY;\nCREATE ROLE warehouse_user IDENTIFIED EXTERNALLY;\nCREATE ROLE role1 CONTAINER = CURRENT;",
          "regexp": "\\bCREATE\\s+ROLE\\s+\\w+\\s+((NOT\\s+IDENTIFIED)|(IDENTIFIED\\s+(USING|EXTERNALLY|GLOBALLY|(BY\\s+[\\s\\S]+?\\s+CONTAINER))))",
          "recommend": "GaussDB中 CREATE ROLE 语法不同",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建视图",
          "syntax": "CREATE [OR REPLACE] [[NO] FORCE] [EDITIONING|EDITIONABLE [EDITIONING]|NONEDITIONABLE] VIEW",
          "originExample": "CREATE VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;\nCREATE OR REPLACE VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;\nCREATE OR REPLACE FORCE VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;\nCREATE OR REPLACE EDITIONING VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;\nCREATE OR REPLACE EDITIONABLE VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;\nCREATE OR REPLACE EDITIONABLE EDITIONING VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;\nCREATE OR REPLACE NONEDITIONABLE VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list;",
          "regexp": "\\bCREATE\\s+(OR\\s+REPLACE\\s+)?(((NO\\s+)?FORCE)|(EDITIONING|EDITIONABLE(\\s+EDITIONING)?|NONEDITIONABLE))\\s+VIEW",
          "recommend": "GaussDB创建视图时不支持 FORCE、EDITIONING、EDITIONABLE、NONEDITIONABLE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "创建视图",
          "syntax": "CREATE VIEW ... AS SELECT ... WITH READ ONLY | CHECK OPTION",
          "originExample": "CREATE OR REPLACE VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list with read ONLY;\nCREATE OR REPLACE VIEW scan_test.mv1 AS SELECT * FROM scan_test.employees_list with check option;",
          "regexp": "\\bCREATE\\s+(OR\\s+REPLACE\\s+)?((NO\\s+)?FORCE\\s+)?(EDITIONING\\s+|EDITIONABLE(\\s+EDITIONING)?\\s+|NONEDITIONABLE\\s+)?VIEW\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+[\\s\\S]*?\\bAS\\s+SELECT\\s+[\\s\\S]+?\\bWITH\\s+((READ\\s+ONLY)|(CHECK\\s+OPTION))",
          "recommend": "GaussDB创建视图时不支持 WITH READ ONLY 或 WITH CHECK OPTION",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "约束",
          "syntax": "INLINE - CONSTRAINT",
          "originExample": "DROP INDEX scan_test.emp_constr_idx;\nCREATE INDEX scan_test.emp_constr_idx on scan_test.employees_constr(last_name);\n\nDROP TABLE scan_test.employees_constr;\nCREATE TABLE scan_test.employees_constr (  \n    employee_id NUMBER CONSTRAINT emp_pk PRIMARY KEY,  \n    first_name VARCHAR2(50) CONSTRAINT emp_first_name_nn NOT NULL ENABLE,  \n    last_name VARCHAR2(50) CONSTRAINT emp_last_name_nn UNIQUE USING INDEX scan_test.emp_constr_idx DISABLE,  \n    email VARCHAR2(100) CONSTRAINT emp_email_unq UNIQUE,  \n    hire_date DATE,  \n    department_id NUMBER constraint emp_did_check check (department_id > 0)\n);",
          "regexp": "\\bCONSTRAINT\\s+[\\s\\S]+?\\b(DISABLE|USING\\s+INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?)",
          "recommend": "GaussDB中 CONSTRAINT 不支持 DISABLE、USING INDEX",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "约束",
          "syntax": "CONSTRAINT ... RFERENCES ...",
          "originExample": "CREATE TABLE scan_test.employees_constr (  \n    employee_id NUMBER,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    department_id NUMBER CONSTRAINT emp_dept_fk REFERENCES scan_test.departments_constr(department_id) ON DELETE CASCADE\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "约束",
          "syntax": "OUT OF LINE - CONSTRAINT",
          "originExample": "DROP TABLE scan_test.employees_constr;\nCREATE TABLE scan_test.employees_constr (  \n    employee_id NUMBER,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    department_id NUMBER,  \n    CONSTRAINT emp_pk PRIMARY KEY (employee_id),\n    CONSTRAINT emp_did_check check (department_id > 0),  \n    CONSTRAINT emp_email_uq UNIQUE (email),  \n    CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES scan_test.departments_constr(department_id)  \n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除路径对象",
          "syntax": "DROP DIRECTORY",
          "originExample": "DROP DIRECTORY mydir;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删索引",
          "syntax": "DROP INDEX",
          "originExample": "\nDROP INDEX scan_test.idx_employees_last_name ONLINE;",
          "regexp": "\\bDROP\\s+INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+ONLINE",
          "recommend": "删除索引时不支持 ONLINE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除序列",
          "syntax": "DROP SEQUENCE",
          "originExample": "DROP SEQUENCE scan_test.customers_seq;\nCREATE SEQUENCE scan_test.customers_seq\n START WITH     1000\n INCREMENT BY   1\n maxvalue 9999\n minvalue 1000\n cycle\n cache 100;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除同义词",
          "syntax": "DROP [PUBLIC] SYNONYM ... FORCE",
          "originExample": "DROP SYNONYM scan_test.emp_idx;\nDROP PUBLIC SYNONYM scan_test.emp_idx;\nDROP SYNONYM scan_test.emp_idx FORCE;",
          "regexp": "\\b((DROP\\s+PUBLIC\\s+SYNONYM)|(DROP\\s+(PUBLIC\\s+)?SYNONYM\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+FORCE))",
          "recommend": "GaussDB中DROP SYNONYM时不支持PUBLIC、FORCE语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除表",
          "syntax": "DROP TABLE ... [CASCADE CONSTRAINTS] [PURGE]",
          "originExample": "CREATE TABLE scan_test.employees_constr (  \n    employee_id NUMBER,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    department_id NUMBER,  \n    CONSTRAINT emp_pk PRIMARY KEY (employee_id),\n    CONSTRAINT emp_did_check check (department_id > 0),  \n    CONSTRAINT emp_email_uq UNIQUE (email),  \n    CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES scan_test.departments_constr(department_id)  \n);\nDROP TABLE scan_test.employees_constr;\nDROP TABLE scan_test.employees_constr CASCADE CONSTRAINTS;\nDROP TABLE scan_test.employees_constr PURGE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "删除视图",
          "syntax": "DROP VIEW",
          "originExample": "DROP VIEW scan_test.mv1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "重命名",
          "syntax": "RENAME ... TO ...",
          "originExample": "RENAME employees_truncate TO employees_truncate1;\nRENAME mv1 TO mv2;\nRENAME customers_seq TO customers_seq_1;\nRENAME emp_idx TO emp_idx_1;",
          "regexp": "\\bRENAME\\s+(\\w+|\\\"\\w+\\\")\\s+TO\\s+(\\w+|\\\"\\w+\\\")",
          "recommend": "GaussDB不支持RENAME TO 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改索引",
          "syntax": "ALTER INDEX ... PARALLEL/LOGGING",
          "originExample": "ALTER INDEX scan_test.idx_employees_last_name PARALLEL 1;\nALTER INDEX scan_test.idx_employees_salary NOPARALLEL;\n\nALTER INDEX scan_test.idx_employees_last_name LOGGING;\nALTER INDEX scan_test.idx_employees_salary NOLOGGING;",
          "regexp": "\\bALTER\\s+INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+[\\s\\S]*?\\b(PARALLEL\\s+\\d+|NOPARALLEL|LOGGING|NOLOGGING|FILESYSTEM_LIKE_LOGGING)\\b",
          "recommend": "GaussDB不支持PARALLEL、LOGGING 相关语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改索引",
          "syntax": "ALTER INDEX ... ENABLE/DISABLE",
          "originExample": "ALTER INDEX scan_test.idx_employees_last_name ENABLE;\nALTER INDEX scan_test.idx_employees_salary DISABLE;",
          "regexp": "\\bALTER\\s+INDEX\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+(ENABLE|DISABLE)",
          "recommend": "不支持 ENABLE/DISABLE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改索引",
          "syntax": "ALTER INDEX ... RENAME TO ...",
          "originExample": "ALTER INDEX scan_test.idx_employees_last_name rename to idx_employees_last_name_1;\nDROP INDEX scan_test.idx_employees_last_name_1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改同义词",
          "syntax": "ALTER SYNONYM",
          "originExample": "ALTER SYNONYM emp_idx EDITIONABLE;\nALTER SYNONYM scan_test.emp_idx COMPILE;\nALTER PUBLIC SYNONYM emp_idx EDITIONABLE;",
          "regexp": "\\bALTER\\s+(PUBLIC\\s+)?SYNONYM",
          "recommend": "GaussDB中 ALTER SYNONYM 用法不同，不支持Oracle的语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表",
          "syntax": "ALTER TABLE 属性\n( LOGGING / COMPRESS / CACHE / PARALLEL / RENAME )",
          "originExample": "DROP TABLE scan_test.employees_alter;\nCREATE TABLE scan_test.employees_alter (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\n\nALTER TABLE scan_test.employees_alter LOGGING;\nALTER TABLE scan_test.employees_alter NOLOGGING;\nALTER TABLE scan_test.employees_alter COMPRESS;\nALTER TABLE scan_test.employees_alter NOCOMPRESS;\nALTER TABLE scan_test.employees_alter CACHE;\nALTER TABLE scan_test.employees_alter NOCACHE;\nALTER TABLE scan_test.employees_alter PARALLEL 1;\nALTER TABLE scan_test.employees_alter NOPARALLEL;\nALTER TABLE scan_test.employees_alter RENAME TO employees_alter_1;\nALTER TABLE scan_test.employees_alter_1 RENAME TO employees_alter;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+[\\s\\S]*?\\b((NO)?LOGGING|(NO)?COMPRESS|(NO)?CACHE|PARALLEL\\s+\\d+|NOPARALLEL)\\b",
          "recommend": "修改表时不支持 LOGGING / COMPRESS / CACHE / PARALLEL 相关语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表",
          "syntax": "ALTER TABLE ... ADD ...",
          "originExample": "DROP SEQUENCE scan_test.employee_alter_seq;\nCREATE SEQUENCE scan_test.employee_alter_seq  \nSTART WITH 1  \nINCREMENT BY 1  \nNOMAXVALUE;\n\nALTER TABLE scan_test.employees_alter add (\n    half_salary NUMBER GENERATED ALWAYS AS (salary / 2),\n    invisi_col NUMBER INVISIBLE,\n    seq_col NUMBER DEFAULT scan_test.employee_alter_seq.CURRVAL,\n    def_col NUMBER DEFAULT 1\n);",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*ADD\\s+[\\s\\S]+?\\b(VISIBLE|INVISIBLE)\\b",
          "recommend": "列定义不支持 VISIBLE/INVISIBLE 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表",
          "syntax": "ALTER TABLE ... MODIFY ...",
          "originExample": "-- MODIFY COLUMN\nDROP TABLE scan_test.employees_alter_identity;\nCREATE TABLE scan_test.employees_alter_identity (  \n    employee_id NUMBER GENERATED ALWAYS AS IDENTITY (\n\t    START WITH 1\n\t    INCREMENT BY 1\n\t    maxvalue 9999\n\t    minvalue 1\n\t    cycle\n\t    cache 100\n \t),  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nALTER TABLE scan_test.employees_alter_identity MODIFY (\n    employee_id GENERATED ALWAYS AS IDENTITY (\n\t    START WITH 1\n\t    INCREMENT BY 1\n\t    maxvalue 9999\n\t    minvalue 1\n\t    cycle\n\t    cache 10\n \t),\n    first_name VARCHAR2(100),  \n    last_name VARCHAR2(100),\n    salary default 1000\n);\n\nDROP TABLE scan_test.employees_alter_constr;\nCREATE TABLE scan_test.employees_alter_constr (  \n    employee_id NUMBER CONSTRAINT emp_pk PRIMARY KEY,  \n    first_name VARCHAR2(50) CONSTRAINT emp_first_name_nn NOT NULL ENABLE,  \n    last_name VARCHAR2(50) CONSTRAINT emp_last_name_nn UNIQUE,  \n    email VARCHAR2(100) CONSTRAINT emp_email_unq UNIQUE,  \n    hire_date DATE,  \n    department_id NUMBER constraint emp_did_check check (department_id > 0)\n);\nALTER TABLE scan_test.employees_alter_constr MODIFY (  \n    employee_id CONSTRAINT emp_pk PRIMARY KEY,  \n    first_name CONSTRAINT emp_first_name_nn NOT NULL ENABLE,  \n    last_name CONSTRAINT emp_last_name_nn UNIQUE USING INDEX scan_test.emp_constr_idx DISABLE,  \n    email CONSTRAINT emp_email_unq UNIQUE,\n    department_id constraint emp_did_check check (department_id > 0)\n);",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*MODIFY\\s+[\\s\\S]+?\\b(DISABLE|USING\\s+INDEX|GENERATED|DEFAULT|CONSTRAINT\\s+[\\s\\S]+?(PRIMARY\\s+KEY|UNIQUE|CHECK))",
          "recommend": "修改表时不支持修改IEDENTITY、DEFAULT 和约束（NOT NULL除外）",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表",
          "syntax": "ALTER TABLE ... DROP COLUMN ...",
          "originExample": "DROP TABLE scan_test.employees_alter_drop;\nCREATE TABLE scan_test.employees_alter_drop (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nALTER TABLE scan_test.employees_alter_drop SET UNUSED (last_name);\nALTER TABLE scan_test.employees_alter_drop SET UNUSED COLUMN last_name;\nALTER TABLE scan_test.employees_alter_drop SET UNUSED COLUMN last_name CASCADE CONSTRAINTS;\nALTER TABLE scan_test.employees_alter_drop SET UNUSED COLUMN last_name INVALIDATE ONLINE;\nALTER TABLE scan_test.employees_alter_drop DROP COLUMN hire_date;\nALTER TABLE scan_test.employees_alter_drop DROP COLUMN hire_date CASCADE CONSTRAINTS;\nALTER TABLE scan_test.employees_alter_drop DROP COLUMN hire_date INVALIDATE;\nALTER TABLE scan_test.employees_alter_drop DROP (hire_date);\nALTER TABLE scan_test.employees_alter_drop DROP UNUSED COLUMNS;\nALTER TABLE scan_test.employees_alter_drop DROP COLUMNS CONTINUE;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*((SET\\s+UNUSED)|(DROP\\s+(UNUSED|COLUMNS|\\(\\s*(\\w+|\\\"\\w+\\\")(\\s*,\\s*(\\w+|\\\"\\w+\\\"))*\\s*\\)|COLUMN\\s+(\\w+|\\\"\\w+\\\")\\s+(CASCADE\\s+CONSTRAINTS\\s+)?INVALIDATE)))",
          "recommend": "GaussDB中不支持的ALTER TABLE ... DROP 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表",
          "syntax": "ALTER TABLE ... DROP CONSTRAINT ...",
          "originExample": "DROP TABLE scan_test.employees_drop_constr;\nCREATE TABLE scan_test.employees_drop_constr (  \n    employee_id NUMBER CONSTRAINT emp_pk PRIMARY KEY,  \n    first_name VARCHAR2(50) CONSTRAINT emp_first_name_nn NOT NULL ENABLE,  \n    last_name VARCHAR2(50) CONSTRAINT emp_last_name_nn UNIQUE,  \n    email VARCHAR2(100) CONSTRAINT emp_email_unq UNIQUE,  \n    hire_date DATE,  \n    department_id NUMBER CONSTRAINT emp_did_check check (department_id > 0)\n);\nALTER TABLE scan_test.employees_drop_constr DROP PRIMARY key;\nALTER TABLE scan_test.employees_drop_constr DROP UNIQUE (last_name, email);\nALTER TABLE scan_test.employees_drop_constr DROP CONSTRAINT emp_email_unq;\nALTER TABLE scan_test.employees_drop_constr DROP CONSTRAINT emp_email_unq CASCADE;\nALTER TABLE scan_test.employees_drop_constr DROP CONSTRAINT emp_email_unq CASCADE DROP INDEX;\nALTER TABLE scan_test.employees_drop_constr DROP CONSTRAINT emp_email_unq CASCADE ONLINE;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*DROP\\s+(PRIMARY\\s+key|UNIQUE|CONSTRAINT\\s+(\\w+|\\\"\\w+\\\")\\s+(CASCADE\\s+)?((KEEP|DROP)\\s+INDEX|((KEEP|DROP)\\s+INDEX\\s+)?ONLINE))",
          "recommend": "GaussDB在修改表删除约束时不支持DROP PRIMARY、DROP UNIQUE 用法和 KEEP|DROP INDEX、ONLINE关键字",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... MODIFY DEFAULT ATTRIBUTES",
          "originExample": "DROP TABLE scan_test.orders_range_alter_partition;\nCREATE TABLE scan_test.orders_range_alter_partition (\n    order_id      NUMBER PRIMARY KEY,\n    order_amount  NUMBER(10,2),\n    order_date    DATE\n)\nPARTITION BY RANGE (order_amount)\n(\n    PARTITION orders_low VALUES LESS THAN (100),\n    PARTITION orders_medium VALUES LESS THAN (500),\n    PARTITION orders_high VALUES LESS THAN (MAXVALUE)\n);\n\nINSERT INTO scan_test.orders_range_alter_partition (order_id, order_amount, order_date) VALUES (1, 50, TO_DATE('2023-01-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.orders_range_alter_partition (order_id, order_amount, order_date) VALUES (2, 250, TO_DATE('2023-02-15', 'YYYY-MM-DD'));\nINSERT INTO scan_test.orders_range_alter_partition (order_id, order_amount, order_date) VALUES (3, 750, TO_DATE('2023-03-30', 'YYYY-MM-DD'));\n\nALTER TABLE scan_test.orders_range_alter_partition MODIFY DEFAULT ATTRIBUTES READ WRITE;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*MODIFY\\s+DEFAULT\\s+ATTRIBUTES",
          "recommend": "不支持 MODIFY DEFAULT ATTRIBUTES",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... SET INTERVAL/SORE IN",
          "originExample": "ALTER TABLE scan_test.orders_range_alter_partition SET INTERVAL();\nALTER TABLE scan_test.orders_range_alter_partition SET STORE IN(IDX_ABC);",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*SET\\s+(INTERVAL|STORE\\s+IN)",
          "recommend": "不支持SET INTERVAL和SET STORE IN语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... SPLIT PARTITION ...",
          "originExample": "ALTER TABLE scan_test.orders_range_alter_partition SPLIT PARTITION orders_low AT (50);",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*SPLIT\\s+PARTITION",
          "recommend": "不支持 SPLIT PARTITION语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... MERGE ... TO",
          "originExample": "ALTER TABLE scan_test.orders_range_alter_partition MERGE PARTITIONS orders_low TO orders_medium;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... EXCHANGE PARTITION ... WITH TABLE ...",
          "originExample": "DROP TABLE scan_test.orders_range_exchange;\nCREATE TABLE scan_test.orders_range_exchange (\n    order_id      NUMBER PRIMARY KEY,\n    order_amount  NUMBER(10,2),\n    order_date    DATE\n);\nALTER TABLE scan_test.orders_range_alter_partition EXCHANGE PARTITION orders_low WITH TABLE scan_test.orders_range_exchange;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*EXCHANGE\\s+PARTITION",
          "recommend": "不支持EXCHANGE PARTITION ... WITH TABLE ...",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... MODIFY PARTITION ...",
          "originExample": "ALTER TABLE scan_test.orders_range_alter_partition MODIFY PARTITION orders_low READ WRITE;\n\nCREATE TABLE scan_test.orders_range_modify_part (\n    order_id      NUMBER PRIMARY KEY,\n    order_amount  NUMBER(10,2),\n    order_date    DATE\n);\nALTER TABLE scan_test.orders_range_modify_part MODIFY PARTITION BY RANGE (order_amount)\n(\n    PARTITION orders_low VALUES LESS THAN (100),\n    PARTITION orders_medium VALUES LESS THAN (500),\n    PARTITION orders_high VALUES LESS THAN (MAXVALUE)\n);",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*MODIFY\\s+PARTITION",
          "recommend": "不支持修改分区表 MODIFY PARTITION 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... ADD PARTITION ...",
          "originExample": "-- REANGE\nDROP TABLE scan_test.orders_range_add_partition;\nCREATE TABLE scan_test.orders_range_add_partition (\n    order_id      NUMBER PRIMARY KEY,\n    order_amount  NUMBER(10,2),\n    order_date    DATE\n)\nPARTITION BY RANGE (order_amount)\n(\n    PARTITION orders_low VALUES LESS THAN (100),\n    PARTITION orders_medium VALUES LESS THAN (500)\n);\nALTER TABLE scan_test.orders_range_add_partition ADD PARTITION orders_add values less than (1000);\n\n-- HASH\nDROP TABLE scan_test.sales_hash_add_partition;\nCREATE TABLE scan_test.sales_hash_add_partition (  \n    sale_id       NUMBER PRIMARY KEY,  \n    product_id    NUMBER,  \n    sale_date     DATE,  \n    sale_amount   NUMBER(10,2)  \n)  \nPARTITION BY HASH (sale_id)  \n(  \n    PARTITION sales_part1,  \n    PARTITION sales_part2,  \n    PARTITION sales_part3,  \n    PARTITION sales_part4  \n);\nALTER TABLE scan_test.sales_hash_add_partition ADD PARTITION sales_part5;\n\n-- LIST\nDROP TABLE scan_test.employees_list_add_partition;\nCREATE TABLE scan_test.employees_list_add_partition (  \n    employee_id   NUMBER PRIMARY KEY,  \n    employee_name VARCHAR2(100),  \n    department_id NUMBER  \n)  \nPARTITION BY LIST (department_id)  \n(  \n    PARTITION emp_sales VALUES (10, 20),\n    PARTITION emp_hr VALUES (30, 40)\n);  \nALTER TABLE scan_test.employees_list_add_partition ADD PARTITION emp_it VALUES (50, 60);",
          "regexp": "",
          "recommend": "修改表新增分区只做最简单的语句，其他配置语法太多且过于复杂，暂不支持扫描",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... DROP PARTITION ...",
          "originExample": "ALTER TABLE scan_test.orders_range_add_partition DROP PARTITION orders_low;\nALTER TABLE scan_test.sales_hash_add_partition DROP PARTITION sales_part4;\nALTER TABLE scan_test.employees_list_add_partition DROP PARTITION emp_hr;\nALTER TABLE scan_test.employees_list_add_partition DROP PARTITION emp_hr UPDATE GLOBAL INDEXES;\nALTER TABLE scan_test.employees_list_add_partition DROP PARTITION emp_hr INVALIDATE GLOBAL INDEXES;\nALTER TABLE scan_test.employees_list_add_partition DROP PARTITION emp_hr UPDATE INDEXES;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*DROP\\s+PARTITION\\s+(\\w+|\\\"\\w+\\\")\\s+(((UPDATE|INVALIDATE)\\s+GLOBAL)|(UPDATE))\\s+INDEXES",
          "recommend": "修改表删除分区时不支持更新 INDEX 相关语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... DROP SUBPARTITION ...",
          "originExample": "DROP TABLE scan_test.sales_data_subpart;\nCREATE TABLE scan_test.sales_data_subpart (  \n    sale_id NUMBER,  \n    sale_date DATE,  \n    product_id NUMBER,  \n    amount NUMBER  \n)  \nPARTITION BY RANGE (sale_date)  \nSUBPARTITION BY RANGE (product_id)  \n(  \n    PARTITION p_q1_2023 VALUES LESS THAN (TO_DATE('2023-04-01', 'YYYY-MM-DD'))  \n    (  \n        SUBPARTITION sp_q1_2023_prod1 VALUES LESS THAN (1000),  \n        SUBPARTITION sp_q1_2023_prod2 VALUES LESS THAN (2000),  \n        SUBPARTITION sp_q1_2023_prod3 VALUES LESS THAN (3000),  \n        SUBPARTITION sp_q1_2023_other VALUES LESS THAN (MAXVALUE)  \n    ),  \n    PARTITION p_q2_2023 VALUES LESS THAN (TO_DATE('2023-07-01', 'YYYY-MM-DD'))  \n    (  \n        SUBPARTITION sp_q2_2023_prod1 VALUES LESS THAN (1000),  \n        SUBPARTITION sp_q2_2023_prod2 VALUES LESS THAN (2000) \n    )\n);\nALTER TABLE scan_test.sales_data_subpart DROP SUBPARTITION sp_q1_2023_other;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... RENAME PARTITION ...",
          "originExample": "-- RENAME PARTITION\nALTER TABLE scan_test.sales_data_subpart RENAME PARTITION p_q1_2023 TO p_q1_2023_r;\nALTER TABLE scan_test.sales_data_subpart RENAME SUBPARTITION sp_q1_2023_other TO sp_q1_2023_prod4;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... TRUNCATE PARTITION ...",
          "originExample": "-- TRUNCATE PARTITION\nALTER TABLE scan_test.sales_data_subpart TRUNCATE PARTITION p_q1_2023;\nALTER TABLE scan_test.sales_data_subpart TRUNCATE SUBPARTITION sp_q1_2023_other;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... MOVE PARTITION ...",
          "originExample": "-- MOVE PARTITION\nALTER TABLE scan_test.employees_list_add_partition MOVE PARTITION emp_sales;\nALTER TABLE scan_test.sales_data_subpart MOVE SUBPARTITION sp_q1_2023_prod1;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... COALESCE PARTITION",
          "originExample": "ALTER TABLE scan_test.sales_hash_add_partition COALESCE PARTITION;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*COALESCE\\s+PARTITION",
          "recommend": "不支持 COALESCE PARTITION",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改分区表",
          "syntax": "ALTER TABLE ... ADD EXTERNAL PARTITION ATTRIBUTES",
          "originExample": "ALTER TABLE scan_test.sales_data_subpart ADD EXTERNAL PARTITION ATTRIBUTES external_table;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*ADD\\s+EXTERNAL\\s+PARTITION\\s+ATTRIBUTES",
          "recommend": "不支持 ADD EXTERNAL PARTITION ATTRIBUTES",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改视图",
          "syntax": "ALTER VIEW",
          "originExample": "ALTER VIEW scan_test.mv1 COMPILE;",
          "regexp": "\\bALTER\\s+VIEW\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+COMPILE",
          "recommend": "修改视图时不支持 COMPILE",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表",
          "syntax": "ALTER TABLE ... MOVE TABLESPACE",
          "originExample": "DROP TABLE scan_test.employees_move_ts;\nCREATE TABLE scan_test.employees_move_ts (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\nCREATE TABLESPACE IDX_MOVE \n   DATAFILE 'IDX_MOVE.dbf' SIZE 40M \n   ONLINE;\n-- GaussDB\nCREATE TABLESPACE IDX_MOVE RELATIVE LOCATION 'tablespace/tablespace_move';\nALTER TABLE scan_test.employees_move_ts MOVE TABLESPACE IDX_MOVE;",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+((NO\\s+)?MEMOPTIMIZE\\s+FOR\\s+(READ|WRITE)\\s+)*MOVE\\s+[\\s\\S]*?\\bTABLESPACE\\s+",
          "recommend": "GaussDB-Oracle中移动表空间使用ALTER TABLE ... SET TABLESPACE",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "新建表-物理属性",
          "syntax": "CREATE TABLE ... SEGMENT CREATION/PCTFREE/PCTUSED/INITRANS/MAXTRANS/STORAGE()/[NO]LOGGING",
          "originExample": "DROP TABLE scan_test.employees_storage;\nCREATE TABLE scan_test.employees_storage (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n) \nSEGMENT CREATION DEFERRED\nPCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255\nSTORAGE (FREELISTS 20 FREELIST GROUPS 2)\nNOLOGGING;",
          "regexp": "\\bCREATE\\s+((GLOBAL|PRIVATE)\\s+TEMPORARY)?TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*\\([\\s\\S]+?\\b((SEGMENT\\s+CREATION\\s+(IMMEDIATE|DEFERRED))|((PCTFREE|PCTUSED|INITRANS|MAXTRANS)\\s+\\d+)|(STORAGE\\s*\\([^\\)]+\\))|((NO)?LOGGING))",
          "recommend": "GaussDB新建表时不支持设置物理属性的 SEGMENT CREATION/PCTFREE/PCTUSED/INITRANS/MAXTRANS/STORAGE()/[NO]LOGGING 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "新建表",
          "syntax": "CREATE TABLE ... LOB STORAGE",
          "originExample": "DROP TABLE scan_test.employees_lobstorage;\nCREATE TABLE scan_test.employees_lobstorage (  \n    employee_id NUMBER PRIMARY KEY,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2),\n    notes CLOB\n)\nLOB (notes) STORE AS BASICFILE(ENABLE STORAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING);",
          "regexp": "\\bCREATE\\s+((GLOBAL|PRIVATE)\\s+TEMPORARY)?TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*\\([\\s\\S]+?\\bLOB\\s*\\(\\s*(\\w+|\\\"\\w+\\\")(\\s*,\\s*(\\w+|\\\"\\w+\\\"))*\\s*\\)\\s*STORE\\s+AS",
          "recommend": "GaussDB新建表时不支持LOB STORAGE子句",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表-物理属性",
          "syntax": "ALTER TABLE ... TABLESPACE/PCTFREE/PCTUSED/INITRANS/MAXTRANS/STORAGE()",
          "originExample": "ALTER TABLE scan_test.employees_physical \nPCTFREE 10 PCTUSED 40 INITRANS 2 MAXTRANS 255\nSTORAGE (\n\tINITIAL 64K\n\tNEXT 1M\n\tMINEXTENTS 1\n\tMAXEXTENTS UNLIMITED\n);",
          "regexp": "\\bALTER\\s+TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s+[\\s\\S]*?\\b(((PCTFREE|PCTUSED|INITRANS|MAXTRANS)\\s+\\d+)|(STORAGE\\s*\\([^\\)]+\\)))",
          "recommend": "GaussDB修改表时不支持物理属性 PCTFREE/PCTUSED/INITRANS/MAXTRANS/STORAGE() 语法",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "修改表",
          "syntax": "ALTER TABLE ... ADD CONSTRAINT",
          "originExample": "-- ALTER TABLE ... ADD CONSTRAINT\nDROP TABLESPACE USING_IDX_TS;\nCREATE TABLESPACE USING_IDX_TS \n   DATAFILE 'USING_IDX_TS.dbf' SIZE 40M \n   ONLINE;\nCREATE TABLESPACE USING_IDX_TS RELATIVE LOCATION 'tablespace/tablespace_using_idx_ts';\n\nDROP TABLE scan_test.employees_idx_ts;\nCREATE TABLE scan_test.employees_idx_ts (  \n    employee_id NUMBER,  \n    first_name VARCHAR2(50),  \n    last_name VARCHAR2(50),  \n    email VARCHAR2(100),  \n    hire_date DATE,  \n    salary NUMBER(10, 2)\n);\n\nALTER TABLE scan_test.employees_idx_ts ADD CONSTRAINT emp_pk PRIMARY KEY (employee_id) USING INDEX TABLESPACE USING_IDX_TS;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FUNCTION": [
        {
          "desc": "求绝对值",
          "syntax": "ABS",
          "originExample": "select abs(-66) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "位与",
          "syntax": "BITAND",
          "originExample": "select bitand(2,1) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向上取整",
          "syntax": "CEIL",
          "originExample": "SELECT\n    ceil(0) AS \"ceil(0)\",\n    ceil(10) AS \"ceil(10)\",\n    ceil(10.11) AS \"ceil(10.11)\",\n    ceil(-10.11) AS \"ceil(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回e的X次方",
          "syntax": "EXP",
          "originExample": "SELECT EXP(4) \"e to the 4th power\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "向下取整",
          "syntax": "FLOOR",
          "originExample": "SELECT\n    floor(0) AS \"floor(0)\",\n    floor(10) AS \"floor(10)\",\n    floor(10.11) AS \"floor(10.11)\",\n    floor(-10.11) AS \"floor(-10.11)\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回X的自然对数",
          "syntax": "LN",
          "originExample": "SELECT LN(3.0) AS \"Natural Logarithm\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "单个参数版本将返回X的自然对数,如果调用两个参数,它返回X的对数的任意基数B",
          "syntax": "LOG",
          "originExample": "SELECT LOG(2, 8) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求余数",
          "syntax": "MOD",
          "originExample": "SELECT MOD(29,3) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "两个函数的功能相同，都是所传参数的次方的结果值",
          "syntax": "POWER",
          "originExample": "select power(2,3)from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "生成一个0~1之间的随机数，传入整数参数是，用来产生重复序列",
          "syntax": "DBMS_RANDOM.VALUE\nDBMS_RANDOM.RANDOM",
          "originExample": "SELECT DBMS_RANDOM.VALUE from dual;\nSELECT DBMS_RANDOM.RANDOM from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "对所传参数进行四舍五入",
          "syntax": "ROUND (number)",
          "originExample": "SELECT ROUND(3, 100) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回参数的符号",
          "syntax": "SIGN",
          "originExample": "select sign(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "求二次方根",
          "syntax": "SQRT",
          "originExample": "select sqrt(20) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "此函数用于返回X的截断到小数位D号的值。 如果D为0，则小数点被除去。",
          "syntax": "TRUNC (number)",
          "originExample": "select TRUNC(1.5) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "空值比较",
          "syntax": "x is null",
          "originExample": "select * from person where job is null;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "解释每个参数n为一个整数，并返回包含这些整数的代码值中给出的字符的字符串",
          "syntax": "CHR",
          "originExample": "select chr(65) from dual;\nSELECT CHR (196 USING NCHAR_CS);",
          "regexp": "\\bCHR\\s*\\(\\s*\\d+\\s+USING\\s+",
          "recommend": "函数CHR参数中不支持USING的用法",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "合并字符串函数，返回结果为连接参数产生的字符串，参数可以使一个或多个",
          "syntax": "CONCAT",
          "originExample": "select concat('6','a') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回首字母大写",
          "syntax": "INITCAP",
          "originExample": "select initcap( 'heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为小写",
          "syntax": "LOWER",
          "originExample": "SELECT LOWER('heeKKo') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "左填充用字符串str中垫到len字符长度",
          "syntax": "LPAD",
          "originExample": "select lpad('test',10,'ee') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串前面的空格",
          "syntax": "LTRIM",
          "originExample": "select ltrim('abcccabddee','abc') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配字符来替换给定的字符串",
          "syntax": "REGEXP_REPLACE",
          "originExample": "select regexp_replace('你好hello世界abc', '[A-Za-z]+') from dual;\nSELECT regexp_replace('512.123.4567 612.123.4567', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1) \\2-\\3') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "通过正则匹配返回子字符串",
          "syntax": "REGEXP_SUBSTR",
          "originExample": "SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,1,'i') AS STR FROM DUAL;\nSELECT REGEXP_SUBSTR('number of your street, zipcode town, FR', ',[^,]+') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串替换函数，返回替换后的新字符串",
          "syntax": "REPLACE",
          "originExample": "select replace('123456789','4','88888888' ) from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "右填充以字符串str中垫到len字符长度",
          "syntax": "RPAD",
          "originExample": "select rpad('tech on the net', 16, 'z')  from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串尾部的空格",
          "syntax": "RTRIM",
          "originExample": "SELECT RTRIM('aabcab','ab') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "截取字符串",
          "syntax": "SUBSTR",
          "originExample": "SELECT SUBSTR('ABCDEFG',-5,4) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "删除字符串左右两侧的空格",
          "syntax": "TRIM",
          "originExample": "select trim(trailing 'x' from 'dylanx') \"test_trim\" from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将字符串中的字母转换为大写",
          "syntax": "UPPER",
          "originExample": "select upper('daHHqqq') from dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串反转（逆序）函数，返回与原始字符串顺序相反的字符串",
          "syntax": "REVERSE()",
          "originExample": "SELECT REVERSE('abc') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "=====",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ASCII",
          "originExample": "SELECT ASCII('a') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "INSTR",
          "originExample": "SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LENGTH",
          "originExample": "SELECT LENGTH('high') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "REGEXP_INSTR",
          "originExample": "SELECT\n  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',\n               '[^ ]+', 1, 6) \"REGEXP_INSTR\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "========",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ADD_MONTHS",
          "originExample": "SELECT ADD_MONTHS(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'), 2) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_DATE",
          "originExample": "SELECT CURRENT_DATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "SELECT CURRENT_TIMESTAMP(6) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CURRENT_TIMESTAMP",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "EXTRACT (datetime)",
          "originExample": "SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_DAY",
          "originExample": "SELECT LAST_DAY(SYSDATE) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "返回期间之间的月数",
          "syntax": "MONTHS_BETWEEN",
          "originExample": "SELECT MONTHS_BETWEEN(TO_DATE('05-02-2023','MM-DD-YYYY'), TO_DATE('03-04-2023','MM-DD-YYYY')) FROM DUAL;",
          "regexp": "",
          "recommend": "函数 MONTHS_BETWEEN 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROUND (date)\n注意：无法与ROUND(number)区分",
          "originExample": "SELECT ROUND(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'YYYY') FROM DUAL;",
          "regexp": "",
          "recommend": "函数 ROUND 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效，且参数类型与Oracle有差异",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSDATE",
          "originExample": "SELECT SYSDATE FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_TIMESTAMP",
          "originExample": "SELECT TO_TIMESTAMP ('2023-03-17 14:10:10', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DSINTERVAL（select sysdate + to_dsinterval('0 0:0:30') from dual\n表示加30秒。）",
          "originExample": "SELECT TO_DSINTERVAL('100 00:00:00') FROM DUAL;",
          "regexp": "",
          "recommend": "函数TO_DSINTERVAL在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL（select to_date('20110101','yyyyMMDD') + to_yminterval('02-08') from dual;）",
          "originExample": "SELECT TO_YMINTERVAL('1-2')FROM DUAL;",
          "regexp": "",
          "recommend": "函数TO_YMINTERVAL在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TRUNC (date)",
          "originExample": "SELECT TRUNC(TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss'),'DDD') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "GREATEST",
          "originExample": "SELECT GREATEST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAST",
          "originExample": "SELECT LEAST(2, 5, 12, 3, 16, 8, 9) A FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "BIN_TO_NUM",
          "originExample": "SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CAST",
          "originExample": "SELECT CAST('12.52' AS int) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTODSINTERVAL",
          "originExample": "SELECT NUMTODSINTERVAL(1,'day') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NUMTOYMINTERVAL",
          "originExample": "SELECT NUMTOYMINTERVAL(1,'year') FROM DUAL;",
          "regexp": "",
          "recommend": "函数 NUMTOYMINTERVAL 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYSTIMESTAMP",
          "originExample": "SELECT SYSTIMESTAMP FROM DUAL;",
          "regexp": "\\bSYSTIMESTAMP\\b",
          "recommend": "不支持 SYSTIMESTAMP\n 函数，可尝试current_timestamp，但不包含时区信息",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CHAR",
          "originExample": "drop table scan_test.empl_temp;\nCREATE TABLE scan_test.empl_temp \n  ( \n     employee_id NUMBER(6), \n     first_name  VARCHAR2(20), \n     last_name   VARCHAR2(25), \n     email       VARCHAR2(25), \n     hire_date   DATE DEFAULT SYSDATE, \n     job_id      VARCHAR2(10), \n     clob_column CLOB, \n     blob_column BLOB \n  );\nINSERT INTO scan_test.empl_temp\nVALUES(111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee', '01010101');\nINSERT INTO scan_test.empl_temp\nVALUES(112,'John','Smith','example.com','12-JAN-2015','1002','Junior Employee', '01010101');\nINSERT INTO scan_test.empl_temp\nVALUES(113,'Johnnie','Smith','example.com','12-JAN-2014','1002','Mid-Career Employee', '01010101');\nINSERT INTO scan_test.empl_temp\nVALUES(115,'Jane','Doe','example.com','15-JAN-2015','1005','Executive Employee', '01010101');\n\n-- TO_CHAR(blob)\nSELECT To_char(blob_column) \"BLOB_TO_CHAR\" \nFROM   scan_test.empl_temp \nWHERE  employee_id IN ( 111, 112, 115 );\n-- TO_CHAR(character)\nSELECT TO_CHAR('01110') FROM DUAL;\nSELECT To_char(clob_column) \"CLOB_TO_CHAR\" \nFROM   scan_test.empl_temp \nWHERE  employee_id IN ( 111, 112, 115 );\n-- TO_CHAR(datetime)\nSELECT TO_CHAR(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') FROM DUAL;\n-- TO_CHAR(number)\nSELECT TO_CHAR('01110' + 1) FROM DUAL;",
          "regexp": "",
          "recommend": "不支持TO_CHAR(BLOB)但正则无法支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_CLOB",
          "originExample": "SELECT TO_CLOB(blob_column) \"BLOB_TO_CLOB\" \nFROM   scan_test.empl_temp \nWHERE  employee_id IN ( 111, 112, 115 );\n\nSELECT TO_CLOB('01110') FROM DUAL;",
          "regexp": "",
          "recommend": "不支持TO_CLOB(BLOB)但正则无法支持",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_DATE",
          "originExample": "SELECT TO_DATE('2023-03-20 12:12:12','yyyy-MM-dd hh24:mi:ss') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (character)",
          "originExample": "SELECT TO_NCHAR('Hello') FROM dual;",
          "regexp": "",
          "recommend": "函数TO_NCHAR在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下，支持$、C、TM、TM9、TME、U格式。同时在该参数下，不支持TH、PL、SG格式的fmt。",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (datetime)",
          "originExample": "SELECT TO_NCHAR(SYSDATE) FROM dual;",
          "regexp": "",
          "recommend": "同上",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_NCHAR (number)",
          "originExample": "SELECT TO_NCHAR(12345) FROM dual;",
          "regexp": "",
          "recommend": "同上",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "TO_YMINTERVAL",
          "originExample": "SELECT TO_YMINTERVAL('2-6') + TO_YMINTERVAL('1-3') AS total_interval FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONNECT_BY_PATH",
          "originExample": "CREATE TABLE scan_test.employees_sysconnectbypath (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO scan_test.employees_sysconnectbypath (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO scan_test.employees_sysconnectbypath (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO scan_test.employees_sysconnectbypath (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO scan_test.employees_sysconnectbypath (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO scan_test.employees_sysconnectbypath (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\n-- 查询员工的层次路径\nSELECT employee_id, employee_name, SYS_CONNECT_BY_PATH(employee_name, '/') AS path\nFROM scan_test.employees_sysconnectbypath\nSTART WITH manager_id IS NULL\nCONNECT BY PRIOR employee_id = manager_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case expr when v1 then … when v2 … end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "case when exp1 then … when exp2 end",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "DECODE",
          "originExample": "CREATE TABLE students (\n  student_id   NUMBER,\n  student_name VARCHAR2(50),\n  score        NUMBER\n);\nINSERT INTO students (student_id, student_name, score) VALUES (1, 'John', 80);\nINSERT INTO students (student_id, student_name, score) VALUES (2, 'Sarah', 90);\nINSERT INTO students (student_id, student_name, score) VALUES (3, 'Michael', 70);\nINSERT INTO students (student_id, student_name, score) VALUES (4, 'Emily', 85);\n-- 使用DECODE函数查询成绩等级\nSELECT student_id, student_name, score,\n       DECODE(score,\n              90, 'A',\n              80, 'B',\n              70, 'C',\n              'D') AS grade\nFROM students;\nSELECT student_id, student_name, score,\n       DECODE(\n         WHEN score >= 90 THEN 'A'\n         WHEN score >= 80 THEN 'B'\n         WHEN score >= 70 THEN 'C'\n         ELSE 'D'\n       ) AS grade\nFROM students;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COALESCE",
          "originExample": "CREATE TABLE employees_COALESCE (\n  id NUMBER,\n  name VARCHAR2(100),\n  salary NUMBER\n);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (1, 'John', 5000);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (2, 'Jane', NULL);\nINSERT INTO employees_COALESCE (id, name, salary) VALUES (3, 'Mike', 7000);\nSELECT id, name, COALESCE(salary, 0) AS salary\nFROM employees_COALESCE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NULLIF",
          "originExample": "SELECT NULLIF(12, NULL) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NVL",
          "originExample": "SELECT NVL(null, 1) FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_CONTEXT",
          "originExample": "SELECT SYS_CONTEXT ('hr_apps', 'group_no') \"User Group\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SYS_GUID",
          "originExample": "SELECT SYS_GUID() FROM DUAL;",
          "regexp": "\\bSYS_GUID\\s*\\(",
          "recommend": "不支持 SYS_GUID 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USER",
          "originExample": "SELECT USER FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "USERENV",
          "originExample": "SELECT USERENV('LANGUAGE') FROM DUAL;",
          "regexp": "\\bUSERENV\\s*\\(",
          "recommend": "不支持 USERENV 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "AVG",
          "originExample": "CREATE TABLE scan_test.employees_AVG (\n    employee_id NUMBER,\n    first_name VARCHAR2(50),\n    last_name VARCHAR2(50),\n    salary NUMBER\n);\nINSERT INTO scan_test.employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO scan_test.employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO scan_test.employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4500);\nINSERT INTO scan_test.employees_AVG (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Williams', 5500);\n\nSELECT AVG(salary) AS average_salary\nFROM scan_test.employees_AVG;\n\nSELECT sales_id, AVG(sale_amount) OVER (PARTITION BY sales_id ORDER BY sale_date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS s_aavg\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR",
          "originExample": "CREATE TABLE sales_CORR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    marketing_cost NUMBER\n);\n-- 添加示例数据\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (1, 10000, 5000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (2, 15000, 6000);\nINSERT INTO sales_CORR (product_id, sales_amount, marketing_cost)\nVALUES (3, 12000, 4500);\nSELECT * FROM SALES_CORR;\n-- 使用CORR函数计算相关性\nSELECT CORR(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CORR_*",
          "originExample": "SELECT CORR_S(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;\nSELECT CORR_K(sales_amount, marketing_cost) AS correlation\nFROM sales_CORR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COUNT",
          "originExample": "SELECT COUNT(*) FROM (SELECT 3 FROM DUAL);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_POP",
          "originExample": "CREATE TABLE sales_COVAR (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\n\nINSERT INTO sales_COVAR (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\n\nSELECT COVAR_POP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "COVAR_SAMP",
          "originExample": "SELECT COVAR_SAMP(sales_amount, cost) AS covariance\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "CUME_DIST",
          "originExample": "SELECT product_id, sales_amount, CUME_DIST() OVER (ORDER BY sales_amount) AS cum_dist\nFROM sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "聚合函数",
          "syntax": "DENSE_RANK",
          "originExample": "SELECT DENSE_RANK(5000) WITHIN GROUP (ORDER BY sales_amount DESC) AS DENSE_RANK FROM scan_test.sales_COVAR;",
          "regexp": "\\bDENSE_RANK\\s*\\([\\s\\S]+?\\)\\s*WITHIN\\s+GROUP\\s*\\(\\s*ORDER\\s+BY",
          "recommend": "GaussDB-Oracle不支持DENSE_RANK作为聚合函数的用法",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST",
          "originExample": "CREATE TABLE department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\n\nINSERT INTO department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST",
          "originExample": "SELECT department_id,\n       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) AS \"Worst\",\n       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) AS \"Best\"\nFROM department_employees\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MAX",
          "originExample": "CREATE TABLE scan_test.department_employees (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\nINSERT INTO scan_test.department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\nINSERT INTO scan_test.department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\nINSERT INTO scan_test.department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\nINSERT INTO scan_test.department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (4, 200, 7000, 0.18);\nINSERT INTO scan_test.department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (5, 200, 5500, 0.12);\nINSERT INTO scan_test.department_employees (employee_id, department_id, salary, commission_pct)\nVALUES (6, 200, 6500, 0.25);\n\nSELECT MAX(salary) AS max_salary\nFROM scan_test.department_employees;\n-- 作为窗口函数\nSELECT MAX(salary) OVER (PARTITION BY department_id) AS max_salary\nFROM scan_test.department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MEDIAN",
          "originExample": "CREATE TABLE scan_test.sales_MEDIAN (\n    product_id NUMBER,\n    sales_amount NUMBER\n);\n\n-- 添加示例数据\nINSERT INTO scan_test.sales_MEDIAN (product_id, sales_amount)\nVALUES (1, 1000);\nINSERT INTO scan_test.sales_MEDIAN (product_id, sales_amount)\nVALUES (2, 1500);\nINSERT INTO scan_test.sales_MEDIAN (product_id, sales_amount)\nVALUES (3, 2000);\nINSERT INTO scan_test.sales_MEDIAN (product_id, sales_amount)\nVALUES (4, 2500);\nINSERT INTO scan_test.sales_MEDIAN (product_id, sales_amount)\nVALUES (5, 3000);\nINSERT INTO scan_test.sales_MEDIAN (product_id, sales_amount)\nVALUES (6, 3500);\n\nSELECT MEDIAN(sales_amount) AS median_sales\nFROM scan_test.sales_MEDIAN;\n\n-- 作为窗口函数\nSELECT MEDIAN(sales_amount) OVER (PARTITION BY product_id) AS median_sales\nFROM scan_test.sales_MEDIAN;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "MIN",
          "originExample": "SELECT MIN(salary) AS min_salary\nFROM scan_test.department_employees;\n\n-- 作为窗口函数\nSELECT MIN(salary) OVER (PARTITION BY department_id) AS min_salary\nFROM scan_test.department_employees;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_CONT",
          "originExample": "CREATE TABLE scan_test.sales_PERCENTILE_CONT (\n  sales_id INT PRIMARY KEY,\n  sale_amount NUMBER,\n  sale_date DATE\n);\n\nINSERT INTO scan_test.sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (1, 1000, TO_DATE('2021-01-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (2, 2000, TO_DATE('2021-02-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (3, 3000, TO_DATE('2021-03-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (4, 4000, TO_DATE('2021-04-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.sales_PERCENTILE_CONT (sales_id, sale_amount, sale_date)\nVALUES (5, 5000, TO_DATE('2021-05-01', 'YYYY-MM-DD'));\n\nSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM scan_test.sales_PERCENTILE_CONT;\n\nSELECT PERCENTILE_CONT(0.5) WITHIN group (ORDER BY sale_amount) OVER (PARTITION BY sale_date) AS median\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "\\bPERCENTILE_CONT\\s*\\(\\s*[\\d\\.e]+\\s*\\)\\s*WITHIN\\s+GROUP\\s*\\([^\\)]+?\\)\\s*OVER\\s*\\(",
          "recommend": "函数PERCENTILE_CONT不支持OVER子句",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENTILE_DISC",
          "originExample": "SELECT PERCENTILE_DISC(0.2) WITHIN GROUP (ORDER BY sale_amount) AS median\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "\\bPERCENTILE_DISC\\s*\\(",
          "recommend": "不支持 PERCENTILE_DISC 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "PERCENT_RANK",
          "originExample": "SELECT sale_amount, PERCENT_RANK() OVER (ORDER BY sale_amount) AS percent_rank\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "RANK",
          "originExample": "SELECT RANK(1000) within GROUP (ORDER BY sale_amount DESC) AS percent_rank\nFROM scan_test.sales_PERCENTILE_CONT;\n\nSELECT sale_amount, RANK() OVER (PARTITION BY sales_id ORDER BY sale_amount) AS percent_rank\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV",
          "originExample": "SELECT STDDEV(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_POP",
          "originExample": "SELECT STDDEV_POP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "STDDEV_SAMP",
          "originExample": "SELECT STDDEV_SAMP(sale_amount) AS standard_deviation\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "SUM",
          "originExample": "SELECT SUM(sale_amount) AS total_sale_amount\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_POP",
          "originExample": "SELECT VAR_POP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VAR_SAMP",
          "originExample": "SELECT VAR_SAMP(sale_amount) AS population_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "VARIANCE",
          "originExample": "SELECT VARIANCE(sale_amount) AS sample_variance\nFROM sales_PERCENTILE_CONT;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_QUERY",
          "originExample": "CREATE TABLE product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT * FROM product_json;\n\n-- JSON_QUERY\nSELECT product_name,\n       JSON_QUERY(product_details, '$.color') AS color,\n       JSON_QUERY(product_details, '$.storage') AS storage,\n       JSON_QUERY(product_details, '$.size') AS p_size\nFROM product_json;",
          "regexp": "\\bJSON_QUERY\\s*\\(",
          "recommend": "不支持 JSON_QUERY 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_TABLE",
          "originExample": "SELECT product_name,\n       product_color,\n       product_storage,\n       product_size_w,\n       product_size_h\nFROM scan_test.product_json,\n     JSON_TABLE(product_details, '$'\n                COLUMNS (\n                  product_color VARCHAR2(20) PATH '$.color',\n                  product_storage VARCHAR2(20) PATH '$.storage',\n                  product_size_w VARCHAR2(100) PATH '$.size[0]',\n                  product_size_h VARCHAR2(100) PATH '$.size[1]'\n                )\n               );",
          "regexp": "\\bJSON_TABLE\\s*\\(",
          "recommend": "不支持 JSON_TABLE 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_VALUE",
          "originExample": "SELECT product_name,\n       JSON_VALUE(product_details, '$.color') AS product_color,\n       JSON_VALUE(product_details, '$.storage') AS product_storage,\n       JSON_VALUE(product_details, '$.size') AS product_size,\n       JSON_VALUE(product_details, '$.size[0]') AS product_size_w,\n       JSON_VALUE(product_details, '$.size[1]') AS product_size_h\nFROM scan_test.product_json;",
          "regexp": "\\bJSON_VALUE\\s*\\(",
          "recommend": "不支持 JSON_VALUE 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAY",
          "originExample": "ALTER TABLE product_json ADD (p_size CLOB);\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('5.8\"', '6.2\"')\nWHERE product_id = 1;\n\nUPDATE product_json\nSET p_size = JSON_ARRAY('6.2\"', '6.7\"')\nWHERE product_id = 2;\n\nSELECT product_name, JSON_ARRAY(p_size) AS p_size\nFROM product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_ARRAYAGG",
          "originExample": "SELECT JSON_ARRAYAGG(p_size) AS all_sizes\nFROM product_json;",
          "regexp": "\\bJSON_ARRAYAGG\\s*\\(",
          "recommend": "不支持 JSON_ARRAYAGG 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECT",
          "originExample": "CREATE TABLE employee_json (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\n\nINSERT INTO employee_json (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\n\nSELECT JSON_OBJECT('employee_id' VALUE employee_id,\n                   'full_name' VALUE first_name || ' ' || last_name,\n                   'salary' VALUE salary) AS employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECT\\s*\\(",
          "recommend": "GuassDB中JSON_OBJECT函数入参与Oracle不同",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "JSON_OBJECTAGG",
          "originExample": "SELECT JSON_OBJECTAGG(first_name, salary) AS all_employee_info\nFROM employee_json;",
          "regexp": "\\bJSON_OBJECTAGG\\s*\\(",
          "recommend": "不支持 JSON_OBJECTAGG 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LISTAGG",
          "originExample": "CREATE TABLE scan_test.product_json (\n  product_id INT PRIMARY KEY,\n  product_name VARCHAR2(100),\n  product_details CLOB\n);\n\nINSERT INTO scan_test.product_json (product_id, product_name, product_details)\nVALUES (1, 'iPhone 12', '{\"color\": \"silver\", \"storage\": \"256GB\", \"size\": [\"5.8\", \"6.2\"]}');\n\nINSERT INTO scan_test.product_json (product_id, product_name, product_details)\nVALUES (2, 'Samsung Galaxy S21', '{\"color\": \"black\", \"storage\": \"128GB\", \"size\": [\"6.2\", \"6.7\"]}');\n\nSELECT LISTAGG(product_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY product_name) AS all_product_names FROM scan_test.product_json;",
          "regexp": "\\bLISTAGG\\s*\\(\\s*[^\\)]+?ON\\s+OVERFLOW\\s+(ERROR|TRUNCATE)[^\\)]*?\\)",
          "recommend": "函数 LISTAGG 中不支持 ON OVERFLOW ERROR/TRUNCATE 子句",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTILE",
          "originExample": "CREATE TABLE scan_test.employees_NTILE (\n  employee_id INT PRIMARY KEY,\n  first_name VARCHAR2(50),\n  last_name VARCHAR2(50),\n  salary NUMBER\n);\nINSERT INTO scan_test.employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (1, 'John', 'Doe', 5000);\nINSERT INTO scan_test.employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (2, 'Jane', 'Smith', 6000);\nINSERT INTO scan_test.employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (3, 'Michael', 'Johnson', 4000);\nINSERT INTO scan_test.employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (4, 'Emily', 'Davis', 7000);\nINSERT INTO scan_test.employees_NTILE (employee_id, first_name, last_name, salary)\nVALUES (5, 'David', 'Brown', 5500);\n\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\nFROM scan_test.employees_NTILE;\n-- 窗口函数\nSELECT employee_id, first_name, last_name, salary,\n       NTILE(3) OVER (PARTITION BY employee_id ORDER BY salary DESC) AS salary_bucket\nFROM scan_test.employees_NTILE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "NTH_VALUE ",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         NTH_VALUE(salary, 2) FROM FIRST respect NULLS OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS second_highest_salary\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM scan_test.employees_NTILE\n  )\n)\nWHERE salary = second_highest_salary;",
          "regexp": "\\bNTH_VALUE\\s*\\([\\s\\S]+?\\)\\s*((FROM\\s+(FIRST|LAST)\\s+)|((RESPECT|IGNORE)\\s+NULLS\\s+))",
          "recommend": "函数 NTH_VALUE 不支持 FROM FIRST/LAST 和 RESPECT/IGNORE NULLS子句",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "FIRST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         FIRST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary DESC) AS highest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM scan_test.employees_NTILE\n  )\n)\nWHERE employee_id = highest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAG",
          "originExample": "CREATE TABLE scan_test.employees_LAG (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  hire_date     DATE\n);\nINSERT INTO scan_test.employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (1, 'John', 'Doe', TO_DATE('2022-01-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (2, 'Jane', 'Smith', TO_DATE('2022-02-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (3, 'Michael', 'Johnson', TO_DATE('2022-03-01', 'YYYY-MM-DD'));\nINSERT INTO scan_test.employees_LAG (employee_id, first_name, last_name, hire_date)\nVALUES (4, 'Emily', 'Williams', TO_DATE('2022-04-01', 'YYYY-MM-DD'));\n\nSELECT employee_id, first_name, last_name, hire_date,\n       LAG(employee_id) OVER (ORDER BY hire_date) AS previous_employee_id,\n       LAG(first_name) OVER (ORDER BY hire_date) AS previous_first_name,\n       LAG(last_name) OVER (ORDER BY hire_date) AS previous_last_name\nFROM scan_test.employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LAST_VALUE *",
          "originExample": "SELECT employee_id, first_name, last_name, salary\nFROM (\n  SELECT employee_id, first_name, last_name, salary,\n         LAST_VALUE(employee_id) OVER (PARTITION BY salary_bucket ORDER BY salary ASC) AS lowest_salary_employee_id\n  FROM (\n    SELECT employee_id, first_name, last_name, salary,\n           NTILE(3) OVER (ORDER BY salary DESC) AS salary_bucket\n    FROM scan_test.employees_NTILE\n  )\n)\nWHERE employee_id = lowest_salary_employee_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "LEAD",
          "originExample": "SELECT employee_id, first_name, last_name, hire_date,\n       LEAD(employee_id) OVER (ORDER BY hire_date) AS next_employee_id,\n       LEAD(first_name) OVER (ORDER BY hire_date) AS next_first_name,\n       LEAD(last_name) OVER (ORDER BY hire_date) AS next_last_name\nFROM scan_test.employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ROW_NUMBER",
          "originExample": "SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_number,\n       employee_id, first_name, last_name\nFROM scan_test.employees_LAG;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "将rowid数据类型转换为字符类型",
          "syntax": "ROWIDTOCHAR",
          "originExample": "CREATE TABLE scan_test.employees_rowidtochar (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nSELECT ROWID FROM scan_test.employees_rowidtochar WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%' ORDER BY ROWID;",
          "regexp": "\\bROWIDTOCHAR\\s*\\(",
          "recommend": "GaussDB-Oracle不支持ROWID数据类型，该函数ROWIDTOCHAR也不支持",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "返回空的lob",
          "syntax": "EMPTY_BLOB / EMPTY_CLOB",
          "originExample": "SELECT EMPTY_BLOB() FROM DUAL;\n\nDROP TABLE scan_test.clob_tb;\nCREATE TABLE scan_test.clob_tb(c clob,id int);\nINSERT INTO scan_test.clob_tb VALUES (EMPTY_CLOB(),1);\nSELECT * FROM scan_test.clob_tb;",
          "regexp": "",
          "recommend": "不支持 EMPTY_CLOB 函数，在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "第一个参数在第二个参数中，第二个参数逗号分隔",
          "syntax": "-",
          "originExample": "",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "keep",
          "originExample": "CREATE TABLE employees_keep (\n  employee_id   NUMBER,\n  first_name    VARCHAR2(50),\n  last_name     VARCHAR2(50),\n  department_id NUMBER,\n  salary        NUMBER\n);\n\n-- 插入示例数据\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (1, 'John', 'Doe', 101, 5000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (2, 'Jane', 'Smith', 101, 6000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (3, 'Michael', 'Johnson', 102, 7000);\n\nINSERT INTO employees_keep (employee_id, first_name, last_name, department_id, salary)\nVALUES (4, 'Emily', 'Williams', 102, 5500);\n\n-- 使用KEEP函数查询每个部门的最高薪水员工\nSELECT department_id,\n       MAX(salary) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS highest_salary,\n       MAX(first_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_first_name,\n       MAX(last_name) KEEP (DENSE_RANK FIRST ORDER BY salary DESC) AS employee_last_name\nFROM employees_keep\nGROUP BY department_id;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlparse",
          "originExample": "SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo=\"12435\">\n   <customerName> Acme Enterprises</customerName>\n   <itemNo>32987457</itemNo>\n   </purchaseOrder>'\nWELLFORMED) AS PO FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "xmlagg(expr)",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "getclobval",
          "originExample": "SELECT XMLAGG(XMLPARSE(content first_name WELLFORMED) ORDER BY department_id).getclobval() AS employee_names FROM employees_keep;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "ACOS",
          "originExample": "SELECT ACOS(.3) \"Arc_Cosine\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "ASIN",
          "originExample": "SELECT ASIN(.3) \"Arc_Sine\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "ATAN2",
          "originExample": "SELECT ATAN2(.3, .2) \"Arc_Tangent2\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "COS",
          "originExample": "SELECT COS(180 * 3.14159265359/180) \"Cosine of 180 degrees\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "COSH",
          "originExample": "SELECT COSH(0) \"Hyperbolic cosine of 0\"\n  FROM DUAL;",
          "regexp": "",
          "recommend": "函数 COSH 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "NANVL",
          "originExample": "DROP TABLE SCAN_TEST.float_point_demo;\nCREATE TABLE scan_test.float_point_demo\n  (dec_num NUMBER(10,2), bin_double BINARY_DOUBLE, flo BINARY_DOUBLE);\nINSERT INTO scan_test.float_point_demo\n  VALUES (1234.56,1234.56,1234.56);\nINSERT INTO scan_test.float_point_demo\n  VALUES (0,'NaN','NaN');\nselect * from scan_test.float_point_demo;\nSELECT flo, NANVL(flo,0) FROM scan_test.float_point_demo;",
          "regexp": "",
          "recommend": "函数 NANVL 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "REMAINDER",
          "originExample": "DROP TABLE SCAN_TEST.float_point_demo;\nCREATE TABLE scan_test.float_point_demo\n  (dec_num NUMBER(10,2), bin_double BINARY_DOUBLE, flo BINARY_DOUBLE);\nINSERT INTO scan_test.float_point_demo\n  VALUES (1234.56,1234.56,1234.56);\nINSERT INTO scan_test.float_point_demo\n  VALUES (0,'NaN','NaN');\nselect * from scan_test.float_point_demo;\nSELECT flo, bin_double, REMAINDER(flo, bin_double)\n  FROM scan_test.float_point_demo;",
          "regexp": "",
          "recommend": "函数 REMAINDER 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "SINH",
          "originExample": "SELECT SINH(1) \"Hyperbolic sine of 1\" FROM DUAL;",
          "regexp": "",
          "recommend": "函数 SINH 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "TAN",
          "originExample": "SELECT TAN(135 * 3.14159265359/180) \"Tangent of 135 degrees\"  FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数字函数",
          "syntax": "TANH",
          "originExample": "SELECT TANH(.5) \"Hyperbolic tangent of .5\" FROM DUAL;",
          "regexp": "",
          "recommend": "函数 TANH 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串函数",
          "syntax": "NCHR",
          "originExample": "SELECT NCHR(187) FROM DUAL;",
          "regexp": "",
          "recommend": "函数 NCHR 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串函数",
          "syntax": "NLS_LOWER",
          "originExample": "SELECT NLS_LOWER('NOKTASINDA', 'NLS_SORT = XTurkish') \"Lowercase\" FROM DUAL;",
          "regexp": "",
          "recommend": "函数 NLS_LOWER 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下才支持使用",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串函数",
          "syntax": "NLSSORT",
          "originExample": "CREATE TABLE scan_test.func_nlssort (name VARCHAR2(15));\nINSERT INTO scan_test.func_nlssort VALUES ('Gaardiner');\nINSERT INTO scan_test.func_nlssort VALUES ('Gaberd');\nINSERT INTO scan_test.func_nlssort VALUES ('Gaasten');\nSELECT * FROM scan_test.func_nlssort ORDER BY name;\n-- NLSSORT\nSELECT * FROM scan_test.func_nlssort ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串函数",
          "syntax": "NLS_UPPER",
          "originExample": "SELECT NLS_UPPER('große') \"Uppercase\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串函数",
          "syntax": "TRANSLATE",
          "originExample": "SELECT TRANSLATE('SQL*Plus User''s Guide', ' */''', '___') FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串函数",
          "syntax": "TRANSLATE ... USING",
          "originExample": "-- TRANSLATE USING\nCREATE TABLE scan_test.translate_tab (\n\tchar_col  VARCHAR2(100),\n\tnchar_col NVARCHAR2(50)\n);\nINSERT INTO scan_test.translate_tab values (null, 'ABC');\n\nSELECT * FROM scan_test.translate_tab;\nUPDATE scan_test.translate_tab \n   SET char_col = TRANSLATE (nchar_col USING CHAR_CS);\n\nSELECT * FROM scan_test.translate_tab;",
          "regexp": "\\bTRANSLATE\\s*\\([\\S\\s]+?\\bUSING\\s+",
          "recommend": "函数TRANSLATE参数中不支持USING的用法",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "字符串函数",
          "syntax": "REGEXP_COUNT",
          "originExample": "SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "日期函数",
          "syntax": "DBTIMEZONE",
          "originExample": "SELECT DBTIMEZONE FROM DUAL;",
          "regexp": "",
          "recommend": "函数 DBTIMEZONE 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "日期函数",
          "syntax": "FROM_TZ",
          "originExample": "SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', '3:00') FROM DUAL;",
          "regexp": "\\bFROM_TZ\\s*\\(",
          "recommend": "不支持 FROM_TZ 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "日期函数",
          "syntax": "LOCALTIMESTAMP",
          "originExample": "SELECT LOCALTIMESTAMP FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "日期函数",
          "syntax": "NEXT_DAY",
          "originExample": "SELECT NEXT_DAY('15-OCT-2009','TUESDAY') \"NEXT DAY\" FROM DUAL;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "日期函数",
          "syntax": "SESSIONTIMEZONE",
          "originExample": "SELECT SESSIONTIMEZONE FROM DUAL;",
          "regexp": "",
          "recommend": "函数 SESSIONTIMEZONE 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "CONVERT",
          "originExample": "SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL;",
          "regexp": "\\bCONVERT\\s*\\(",
          "recommend": "函数CONVERT支持的编码类型与Oracle不同",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "CAST(MULTISET() AS ...)",
          "originExample": "CREATE TABLE SCAN_TEST.projects \n  (employee_id NUMBER, project_name VARCHAR2(10));\n\nCREATE TABLE SCAN_TEST.emps_short \n  (employee_id NUMBER, last_name VARCHAR2(10));\n\nCREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10);\n\nSELECT e.last_name,\n       CAST(MULTISET(SELECT p.project_name\n                       FROM SCAN_TEST.projects p \n                       WHERE p.employee_id = e.employee_id\n                       ORDER BY p.project_name)\n       AS project_table_typ)\n  FROM SCAN_TEST.emps_short e\n  ORDER BY e.last_name;",
          "regexp": "\\bCAST\\s*\\(\\s*MULTISET\\s*\\(",
          "recommend": "GaussDB中CAST函数不支持multiset子句",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "HEXTORAW",
          "originExample": "SELECT HEXTORAW('7D') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "RAWTOHEX",
          "originExample": "SELECT RAWTOHEX('7D') FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "SCN_TO_TIMESTAMP",
          "originExample": "CREATE TABLE scan_test.employees_scntotimestamp (\n  employee_id   NUMBER,\n  manager_id    NUMBER,\n  employee_name VARCHAR2(50)\n);\nINSERT INTO scan_test.employees_scntotimestamp (employee_id, manager_id, employee_name) VALUES (1, NULL, 'John');\nINSERT INTO scan_test.employees_scntotimestamp (employee_id, manager_id, employee_name) VALUES (2, 1, 'Sarah');\nINSERT INTO scan_test.employees_scntotimestamp (employee_id, manager_id, employee_name) VALUES (3, 1, 'Michael');\nINSERT INTO scan_test.employees_scntotimestamp (employee_id, manager_id, employee_name) VALUES (4, 2, 'Emily');\nINSERT INTO scan_test.employees_scntotimestamp (employee_id, manager_id, employee_name) VALUES (5, 2, 'David');\nSELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM scan_test.employees_scntotimestamp;",
          "regexp": "\\bSCN_TO_TIMESTAMP\\s*\\(",
          "recommend": "GaussDB-Oracle中没有SCN，也不支持 SCN_TO_TIMESTAMP 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "TIMESTAMP_TO_SCN",
          "originExample": "SELECT TIMESTAMP_TO_SCN(LOCALTIMESTAMP) from DUAL;",
          "regexp": "\\bTIMESTAMP_TO_SCN\\s*\\(",
          "recommend": "GaussDB-Oracle中没有SCN，也不支持 TIMESTAMP_TO_SCN 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "TO_MULTI_BYTE",
          "originExample": "SELECT TO_MULTI_BYTE( 'A') FROM DUAL;",
          "regexp": "",
          "recommend": "函数 TO_MULTI_BYTE 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "TO_SINGLE_BYTE",
          "originExample": "SELECT TO_SINGLE_BYTE(115) FROM DUAL;",
          "regexp": "",
          "recommend": "函数 TO_SINGLE_BYTE 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "转换函数",
          "syntax": "TO_TIMESTAMP_TZ",
          "originExample": "SELECT TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00', 'YYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL;",
          "regexp": "",
          "recommend": "函数 TO_TIMESTAMP_TZ 在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "聚合函数",
          "syntax": "GROUPING",
          "originExample": "CREATE TABLE scan_test.sales_grouping (\n    product_id NUMBER,\n    sales_amount NUMBER,\n    cost NUMBER\n);\nINSERT INTO scan_test.sales_grouping (product_id, sales_amount, cost)\nVALUES (1, 10000, 5000);\nINSERT INTO scan_test.sales_grouping (product_id, sales_amount, cost)\nVALUES (2, 15000, 6000);\nINSERT INTO scan_test.sales_grouping (product_id, sales_amount, cost)\nVALUES (3, 12000, 4500);\nINSERT INTO scan_test.sales_grouping (product_id, sales_amount, cost)\nVALUES (4, 12000, 3500);\nINSERT INTO scan_test.sales_grouping (product_id, sales_amount, cost)\nVALUES (5, 15000, 2500);\nSELECT sales_amount, GROUPING(sales_amount) AS g\n  FROM scan_test.sales_grouping\n  GROUP BY ROLLUP (sales_amount)\n  ORDER BY sales_amount;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "聚合函数",
          "syntax": "ANY_VALUE",
          "originExample": "SELECT sales_id, ANY_VALUE(sale_amount)\nFROM scan_test.sales_PERCENTILE_CONT\nGROUP BY sales_id;",
          "regexp": "\\bANY_VALUE\\s*\\(",
          "recommend": "不支持 ANY_VALUE 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "分析函数",
          "syntax": "窗口函数 - COUNT",
          "originExample": "SELECT sales_id, COUNT(*) OVER (ORDER BY sale_amount RANGE BETWEEN 500 PRECEDING and 1500 FOLLOWING) AS s_acount\nFROM scan_test.sales_PERCENTILE_CONT;\n\nSELECT sales_id, COUNT(*) OVER (ORDER BY sale_amount RANGE UNBOUNDED PRECEDING) AS s_acount\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "\\bCOUNT\\s*\\([\\s\\S]+?\\)\\s*OVER\\s*\\([^\\)]+?(RANGE|ROWS)\\s+(?!(UNBOUNDED\\s+PRECEDING))",
          "recommend": "函数COUNT作为窗口函数使用时只支持UNBOUNDED PRECEDING",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "分析函数",
          "syntax": "窗口函数 - DENSE_RANK",
          "originExample": "SELECT product_id, sales_amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY sales_amount DESC) AS dense_rank\nFROM scan_test.sales_COVAR;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "分析函数",
          "syntax": "窗口函数 - LISTAGG",
          "originExample": "SELECT LISTAGG(product_name, ', ') WITHIN GROUP (ORDER BY product_name) OVER (PARTITION BY product_id) AS all_product_names FROM scan_test.product_json;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "分析函数",
          "syntax": "窗口函数 - SUM",
          "originExample": "SELECT SUM(sale_amount) OVER (PARTITION BY sales_id ORDER BY sale_amount range between 1000 preceding and 3000 preceding) AS total_sale_amount\nFROM scan_test.sales_PERCENTILE_CONT;",
          "regexp": "\\bSUM\\s*\\([\\s\\S]+?\\)\\s*OVER\\s*\\([^\\)]+?(RANGE|ROWS)\\s+(?!(UNBOUNDED\\s+PRECEDING))",
          "recommend": "函数SUM作为窗口函数使用时只支持UNBOUNDED PRECEDING",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "分析函数",
          "syntax": "窗口函数使用 DISTINCT  AVG/COUNT/SUM/MAX/MIN",
          "originExample": "SELECT SUM(distinct sale_amount) OVER (PARTITION BY sales_id) AS total_sale_amount\nFROM scan_test.sales_PERCENTILE_CONT;\n\nSELECT AVG(distinct sale_amount) OVER (PARTITION BY sales_id ORDER BY sale_date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS s_aavg\nFROM scan_test.sales_PERCENTILE_CONT;\n\nSELECT sales_id, COUNT(distinct sale_amount)OVER(PARTITION BY sales_id) AS s_acount\nFROM scan_test.sales_PERCENTILE_CONT;\n\nSELECT MAX(distinct salary) OVER (PARTITION BY department_id) AS max_salary\nFROM scan_test.department_employees;\n\nSELECT MIN(distinct salary) OVER (PARTITION BY department_id) AS min_salary\nFROM scan_test.department_employees;",
          "regexp": "\\b(AVG|COUNT|SUM|MAX|MIN)\\s*\\(\\s*DISTINCT\\s+[\\s\\S]+?\\)\\s*OVER\\s*\\(",
          "recommend": "函数AVG/COUNT/SUM/MAX/MIN作为窗口函数使用时不支持DISTINCT关键字",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON函数",
          "syntax": "JSON_EXISTS",
          "originExample": "SELECT product_name FROM scan_test.product_json\nwhere JSON_EXISTS(product_name, '$[0]');",
          "regexp": "\\bJSON_EXISTS\\s*\\(",
          "recommend": "不支持 JSON_EXISTS 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON函数",
          "syntax": "JSON_EQUAL",
          "originExample": "SELECT product_name FROM scan_test.product_json\nwhere JSON_EQUAL('{a:1, b:2}', '{b:2 , a:1 }');",
          "regexp": "\\bJSON_EQUAL\\s*\\(",
          "recommend": "不支持 JSON_EQUAL 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "JSON函数",
          "syntax": "JSON_MERGEPATCH",
          "originExample": "select JSON_MERGEPATCH('{\"User\":\"ABULL\", \"PONumber\":1600}', '{\"PONumber\":99999}') FROM DUAL;",
          "regexp": "\\bJSON_MERGEPATCH\\s*\\(",
          "recommend": "不支持 JSON_MERGEPATCH 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "NULL相关函数",
          "syntax": "LNNVL",
          "originExample": "select COUNT(*) from scan_test.employees_COALESCE where LNNVL(SALARY > 6000);",
          "regexp": "",
          "recommend": "此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下，才支持lnnvl函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "NULL相关函数",
          "syntax": "NVL2",
          "originExample": "SELECT NVL2(null, 1, 2) FROM DUAL;",
          "regexp": "",
          "recommend": "函数 NVL2 在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "环境和系统标识符函数",
          "syntax": "UID",
          "originExample": "SELECT UID FROM DUAL;",
          "regexp": "\\bUID\\b",
          "recommend": "不支持 UID 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "编解码函数",
          "syntax": "ORA_HASH",
          "originExample": "SELECT ORA_HASH(100, 10, 1) FROM DUAL;",
          "regexp": "\\bORA_HASH\\s*\\(",
          "recommend": "不支持 ORA_HASH 函数",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "编解码函数",
          "syntax": "PIVOT",
          "originExample": "CREATE TABLE scan_test.sales_data_pivot (  \n    year INT,  \n    product VARCHAR2(50),  \n    amount NUMBER  \n);\nINSERT INTO scan_test.sales_data_pivot (year, product, amount) VALUES (2020, 'A', 100);  \nINSERT INTO scan_test.sales_data_pivot (year, product, amount) VALUES (2020, 'B', 200);  \nINSERT INTO scan_test.sales_data_pivot (year, product, amount) VALUES (2021, 'A', 150);  \nINSERT INTO scan_test.sales_data_pivot (year, product, amount) VALUES (2021, 'B', 250);\n\nSELECT *  \nFROM (  \n    SELECT year, product, amount  \n    FROM scan_test.sales_data_pivot  \n)  \nPIVOT (  \n    SUM(amount)  \n    FOR product IN ('A' AS a_sales, 'B' AS b_sales)  \n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "编解码函数",
          "syntax": "UNPIVOT",
          "originExample": "CREATE TABLE scan_test.sales_data_unpivot (  \n    year INT,  \n    product VARCHAR2(50),  \n    a_sales NUMBER,  \n    b_sales NUMBER  \n);\nINSERT INTO scan_test.sales_data_unpivot (year, product, a_sales, b_sales) VALUES (2020, NULL, 100, 200);  \nINSERT INTO scan_test.sales_data_unpivot (year, product, a_sales, b_sales) VALUES (2021, NULL, 150, 250);\n\nSELECT year, product_type, sales  \nFROM (  \n    SELECT year, a_sales, b_sales  \n    FROM scan_test.sales_data_unpivot  \n)  \nUNPIVOT (  \n    sales FOR product_type IN (a_sales AS 'A', b_sales AS 'B')  \n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "编解码函数",
          "syntax": "VSIZE",
          "originExample": "SELECT VSIZE(student_name) FROM scan_test.students_decode;",
          "regexp": "",
          "recommend": "函数 VSIZE 在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效",
          "isSupportUnisql": "Y",
          "level": "阻断"
        }
      ],
      "HINTS": [
        {
          "desc": "",
          "syntax": "LEADING",
          "originExample": "CREATE TABLE test.d1\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d2\n   (\"BUSIN_CODE\" VARCHAR2(6) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"BIRTHDAY\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"FROZEN_END_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ORI_SERIAL_NO\" VARCHAR2(32) DEFAULT ' ' NOT NULL ENABLE, \n\"CFM_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CFM_UNDROZEN_AMT\" NUMBER(18,2) DEFAULT 0 NOT NULL ENABLE, \n\"ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"REMARK\" VARCHAR2(250) DEFAULT ' ' NOT NULL ENABLE, \n\"RISK_LEVEL\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"CONTROLER_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"ACTOR_IDVALID\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"AUX_ID_CODE\" VARCHAR2(50) DEFAULT ' ' NOT NULL ENABLE, \n\"AUX_ID_CODE_DATE\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"IP\" VARCHAR2(40) DEFAULT ' ' NOT NULL ENABLE, \n\"TRANS_TIME\" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, \n\"COLUMN1\" NVARCHAR2(10), \n\"COL\" INTERVAL YEAR (4) TO MONTH, \n\"C1\" NUMBER(*,2), \n\"C2\" NUMBER(10,2)\n);\nCREATE TABLE test.d3(\n a NUMBER DEFAULT 0 NOT NULL ENABLE,\n b char NOT NULL ENABLE,\n c VARCHAR2(50）\n)\nCREATE TABLE test.d4\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n)\nINSERT all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ LEADING(table1 table2  table 2) */ *\nFROM test.d4 d4\nJOIN test.d1  d1 ON d4.DEPT_NO  = d1.BUSIN_CODE \nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "",
          "level": ""
        },
        {
          "desc": "",
          "syntax": "ORDERED",
          "originExample": "SELECT /*+ ORDERED */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO ",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "FULL",
          "originExample": "SELECT /*+ FULL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2  d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d4 d4 ON d1.BUSIN_CODE  = d4.DEPT_NO  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX/NO_INDEX",
          "originExample": "CREATE INDEX idx1 ON test.d4(dept_no)\nSELECT /*+ NO_INDEX(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE    ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_COMBINE",
          "originExample": "SELECT /*+ INDEX_COMBINE(test.d4 idx1) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE     ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_JOIN",
          "originExample": "CREATE INDEX idx2 ON test.d1(BUSIN_CODE)\nCREATE INDEX idx3 ON test.d2(BUSIN_CODE)\nSELECT /*+ INDEX_JOIN(test.d1 idx2) INDEX_JOIN(test.d2 idx3) */ *\nFROM test.d2 d2\nJOIN test.d1 d1 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d2.BUSIN_CODE =d3.a",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_FFS",
          "originExample": "SELECT /*+ INDEX_FFS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE  ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "INDEX_SS",
          "originExample": "SELECT /*+ INDEX_SS(test.d4 index_name) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_INVISIBLE_INDEXES",
          "originExample": "SELECT /*+ USE_INVISIBLE_INDEXES */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BATCH_TABLE_ACCESS_BY_ROWID",
          "originExample": "SELECT /*+ BATCH_TABLE_ACCESS_BY_ROWID(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NATIVE_FULL_OUTER_JOIN",
          "originExample": "SELECT /*+ NATIVE_FULL_OUTER_JOIN */ *\nFROM test.d1 d1\nFULL OUTER JOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE \nFULL OUTER JOIN test.d3 d3 ON d1.BUSIN_CODE  = d3.A ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH",
          "originExample": "SELECT /*+ USE_HASH(test.d4) */ *\nFROM test.d4 d4\nJOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nJOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SWAP_JOIN_INPUTS",
          "originExample": "SELECT /*+ SWAP_JOIN_INPUTS(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "SEMIJOIN_DRIVER",
          "originExample": "SELECT /*+ SEMIJOIN_DRIVER */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL",
          "originExample": "SELECT /*+ USE_NL(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_NL_WITH_INDEX",
          "originExample": "SELECT /*+ USE_NL_WITH_INDEX(test.d1 idx2) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_AJ",
          "originExample": "SELECT /*+ HASH_AJ(table1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_AJ",
          "originExample": "SELECT /*+ NL_AJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_SEMIJOIN",
          "originExample": "SELECT /*+ NO_SEMIJOIN */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "HASH_SJ",
          "originExample": "SELECT /*+ HASH_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NL_SJ",
          "originExample": "SELECT /*+ NL_SJ(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_MERGE",
          "originExample": "SELECT /*+ USE_MERGE(test.d1, test.d2,test.d3) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_BAND",
          "originExample": "SELECT /*+ USE_BAND(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MERGE",
          "originExample": "CREATE TABLE test.d5\n(\n  dept_no     number(6),\n  part_no     varchar2(20),\n  country     varchar2(20),\n  date_str    varchar2(20),\n  amount      number(6)\n);\nMERGE INTO test.d4 dst\nUSING (SELECT * FROM test.d5) src\nON (dst.dept_no = src.dept_no)\nWHEN MATCHED THEN\n  UPDATE SET dst.part_no = src.part_no, dst.date_str = src.date_str\nWHEN NOT MATCHED THEN\n  INSERT (dept_no, part_no, date_str) VALUES (src.dept_no, src.part_no, src.date_str) ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NO_EXPAND",
          "originExample": " SELECT /*+ NO_EXPAND */ *\nFROM test.A1 a \nWHERE a.A =10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "UNNEST",
          "originExample": "SELECT /*+ UNNEST(SELECT d2.BUSIN_CODE  FROM test.d2 d) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ORDERED_PREDICATES",
          "originExample": "SELECT /*+ ORDERED_PREDICATES */ *\nFROM test.d1 d1\nWHERE d1.BUSIN_CODE =1 AND d1.TRANS_DATE IN(SELECT d2.TRANS_DATE  FROM test.d2 d2 WHERE d2.BIRTHDAY >20);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "QB_NAME",
          "originExample": "SELECT /*+ QB_NAME(d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_PRED",
          "originExample": "SELECT /*+ PUSH_PRED(test.d1) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PUSH_SUBQ",
          "originExample": "SELECT /*+ PUSH_SUBQ */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "NOLOGGING",
          "originExample": "INSERT /*+ NOLOGGING */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND",
          "originExample": "INSERT /*+ APPEND */ all\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "BIND_AWARE",
          "originExample": "SELECT /*+ BIND_AWARE */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL",
          "originExample": "SELECT /*+ PARALLEL(test.d1, 4) */ *\nFROM test.d1 d1\nJOIN test.d2 d2 ON d1.BUSIN_CODE  = d2.BUSIN_CODE\nLEFT JOIN test.d3  d3 ON  d1.BUSIN_CODE =d3.A \nRIGHT JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO \nWHERE d1.BUSIN_CODE  IN (SELECT d2.BUSIN_CODE  FROM test.d2 d2);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PARALLEL_INDEX",
          "originExample": "SELECT /*+ PARALLEL_INDEX(table1, ind1, 4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_DISTRIBUTE",
          "originExample": "SELECT /*+ PQ_DISTRIBUTE(test,d4, AUTO) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PX_JOIN_FILTER",
          "originExample": "SELECT /*+ PX_JOIN_FILTER(test.d4) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "PQ_CONCURRENT_UNION ",
          "originExample": "SELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d2 d2\nleft JOIN test.d4 d4 ON d2.BUSIN_CODE =d4.DEPT_NO \nUNION ALL\nSELECT /*+ PQ_CONCURRENT_UNION */ *\nFROM test.d1 d1\nleft JOIN test.d4 d4 ON d1.BUSIN_CODE =d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "ENABLE_PARALLEL_DML",
          "originExample": "UPDATE /*+ ENABLE_PARALLEL_DML */ TEST.d4 d4\nSET d4.DEPT_NO =56\nWHERE d4.PART_NO='dsas' ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "OPT_PARAM",
          "originExample": "SELECT /*+ OPT_PARAM('optimizer_index_cost_adj', 20) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "RESULT_CACHE",
          "originExample": "SELECT /*+ RESULT_CACHE */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "CACHE",
          "originExample": "SELECT /*+ CACHE(table1) */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MATERIALIZE",
          "originExample": "WITH cte AS (\n  SELECT /*+ MATERIALIZE */  *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\n)\nSELECT *\nFROM cte;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "APPEND_VALUES和SYS_DL_CURSOR",
          "originExample": "INSERT ALL  /*+ APPEND_VALUES */\nINTO test.d4 VALUES (10, '4519b', 'FRANCE', '17-Jan-2012', '45000')\nINTO test.d4 VALUES (20, '3788a', 'INDIA', '01-Mar-2012', '75000')\nINTO test.d4 VALUES (40, '9519b', 'US', '12-Apr-2012', '145000')\nINTO test.d4 VALUES (20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500')\nINTO test.d4 VALUES (40, '4577b', 'US', '11-Nov-2012', '25000')\nINTO test.d4 VALUES (30, '7588b', 'CANADA', '14-Dec-2012', '50000')\nINTO test.d4 VALUES (30, '9519b', 'CANADA', '01-Feb-2012', '75000')\nINTO test.d4 VALUES (30, '4519b', 'CANADA', '08-Apr-2012', '120000')\nINTO test.d4 VALUES (40, '3788a', 'US', '12-May-2012', '4950')\nINTO test.d4 VALUES (10, '9519b', 'ITALY', '07-Jul-2012', '15000')\nINTO test.d4 VALUES (10, '9519a', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (10, '9519b', 'FRANCE', '18-Aug-2012', '650000')\nINTO test.d4 VALUES (20, '3788b', 'INDIA', '21-Sept-2012', '5090')\nINTO test.d4 VALUES (40, '4788a', 'US', '23-Sept-2012', '4950')\nINTO test.d4 VALUES (40, '4788b', 'US', '09-Oct-2012', '15000')\nINTO test.d4 VALUES (20, '4519a', 'INDIA', '18-Oct-2012', '650000')\nINTO test.d4 VALUES (20, '4519b', 'INDIA', '2-Dec-2012', '5090')\nSELECT * FROM dual;\n\n\nSELECT /*+ SYS_DL_CURSOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "MONITOR",
          "originExample": "SELECT /*+ MONITOR */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_PLAN_STATISTICS",
          "originExample": "SELECT /*+ GATHER_PLAN_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "GATHER_OPTIMIZER_STATISTICS",
          "originExample": "SELECT /*+ GATHER_OPTIMIZER_STATISTICS */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        },
        {
          "desc": "",
          "syntax": "USE_HASH_AGGREGATION",
          "originExample": "SELECT /*+ USE_HASH_AGGREGATION */ *\nFROM test.d4 d4\nleft JOIN test.d2  d2 ON d4.DEPT_NO  = d2.BUSIN_CODE \nLEFT JOIN test.d3  d3 ON  d4.DEPT_NO  =d3.a\nLEFT OUTER JOIN test.d1 d1 ON d4.DEPT_NO=d1.BUSIN_CODE \nWHERE d4.DEPT_NO >10\nORDER BY d4.DEPT_NO ;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "警告"
        }
      ],
      "VAR": [
        {
          "desc": "",
          "syntax": "ALTER SESSION SET ",
          "originExample": "ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';\nSELECT * FROM test.d4 ;\nALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';\nALTER SESSION SET NLS_LANGUAGE = 'FRENCH';\nALTER SESSION SET TIME_ZONE = 'Asia/Shanghai';",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "",
          "syntax": "ALTER SYSTEM SET ",
          "originExample": "ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;\n--ALTER SYSTEM SET SGA_TARGET = 4G; 谨慎使用设置 SGA（System Global Area）的目标大小为 4GB。SGA 是用于缓存数据和共享池等数据库对象的内存区域。\n--ALTER SYSTEM SET LOG_ARCHIVE_DEST = '/archivelog';  设置归档日志的路径",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ],
      "FEATURE": [
        {
          "desc": "数据类型-字符",
          "syntax": "varchar2/varchar/nvarchar2/nchar varying/char/character/nchar",
          "originExample": "drop table scan_test.datatype_char;\ncreate table scan_test.datatype_char (\n\tcol0 char,\n\tcol1 char(10),\n\tcol2 char(10 BYTE),\n\tcol3 char(10 CHAR)\n);\n\ndrop table scan_test.datatype_varchar2;\ncreate table scan_test.datatype_varchar2 (\n\tcol0 varchar2,\n\tcol1 varchar2(10),\n\tcol2 varchar2(10 BYTE),\n\tcol3 varchar2(10 CHAR)\n);\n\ndrop table scan_test.datatype_nchar;\ncreate table scan_test.datatype_nchar (\n\tcol1 nchar(10),\n\tcol2 nvarchar2(10)\n);\n\ndrop table scan_test.datatype_character;\ncreate table scan_test.datatype_character (\n\tcol1 character(10),\n\tcol2 character varying(10),\n\tcol3 char varying(10),\n\tcol4 nchar varying(10),\n\tcol5 varchar(10)\n);",
          "regexp": "\\b(CHAR|VARCHAR2)\\s*\\(\\s*\\d+\\s+(BYTE|CHAR)\\s*\\)",
          "recommend": "在GaussDB中，CHAR 和 VARCHAR2 长度单位默认为BYTE。不支持加 BYTE、CHAR 关键字",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数据类型-数值",
          "syntax": "number/numeric/decimal/dec/float\n（无法支持标度必须小于等于精度的判断）",
          "originExample": "drop table scan_test.datatype_number;\ncreate table scan_test.datatype_number (\n\tcol1 NUMBER,\n\tcol2 NUMBER(*),\n\tcol3 NUMBER(*, 0),\n\tcol4 NUMBER(*, -84),\n\tcol5 NUMBER(*, 39),\n\tcol6 NUMBER(*, 38),\n\tcol7 NUMBER(38),\n\tcol8 NUMBER(1, 0),\n\tcol9 NUMBER(38, -84),\n\tcol10 NUMBER(38, 39),\n\tcol11 NUMBER(38, 37),\n\tcol12 NUMBER(38, 38)\n);\n\ndrop table scan_test.datatype_numeric;\ncreate table scan_test.datatype_numeric (\n\tcol1 NUMERIC,\n\tcol2 NUMERIC(*),\n\tcol3 NUMERIC(*, 0),\n\tcol4 NUMERIC(*, -84),\n\tcol5 NUMERIC(*, 39),\n\tcol6 NUMERIC(*, 38),\n\tcol7 NUMERIC(38),\n\tcol8 NUMERIC(1, 0),\n\tcol9 NUMERIC(38, -84),\n\tcol10 NUMERIC(38, 39),\n\tcol11 NUMERIC(38, 37),\n\tcol12 NUMERIC(38, 38)\n);\n\ndrop table scan_test.datatype_decimal;\ncreate table scan_test.datatype_decimal (\n\tcol1 DECIMAL,\n\tcol2 DECIMAL(*),\n\tcol3 DECIMAL(*, 0),\n\tcol4 DECIMAL(*, -84),\n\tcol5 DECIMAL(*, 39),\n\tcol6 DECIMAL(*, 38),\n\tcol7 DECIMAL(38),\n\tcol8 DECIMAL(1, 0),\n\tcol9 DECIMAL(38, -84),\n\tcol10 DECIMAL(38, 39),\n\tcol11 DECIMAL(38, 37),\n\tcol12 DECIMAL(38, 38)\n);\n\ndrop table scan_test.datatype_dec;\ncreate table scan_test.datatype_dec (\n\tcol1 DEC,\n\tcol2 DEC(*),\n\tcol3 DEC(*, 0),\n\tcol4 DEC(*, -84),\n\tcol5 DEC(*, 39),\n\tcol6 DEC(*, 38),\n\tcol7 DEC(38),\n\tcol8 DEC(1, 0),\n\tcol9 DEC(38, -84),\n\tcol10 DEC(38, 39),\n\tcol11 DEC(38, 37),\n\tcol12 DEC(38, 38)\n);\ndrop table scan_test.datatype_float;\ncreate table scan_test.datatype_float (\n\tcol1 FLOAT,\n\tcol2 FLOAT(*),\n\tcol3 FLOAT(54),\n\tcol4 FLOAT(1),\n\tcol5 FLOAT(53)\n);",
          "regexp": "\\b(NUMBER|NUMERIC|DECIMAL|DEC|FLOAT)\\s*\\(\\s*\\*(\\s*,?\\s*-?\\d+)?\\s*\\)",
          "recommend": "NUMBER/NUMERIC/DECIMAL/DEC/FLOAT类型精度中不支持星号(*)",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数据类型-数值",
          "syntax": "binary_float/binary_double/double precision/real",
          "originExample": "drop table scan_test.datatype_float;\ncreate table scan_test.datatype_float (\n\tcol6 BINARY_FLOAT,\n\tcol7 BINARY_DOUBLE,\n\tcol8 DOUBLE PRECISION,\n\tcol9 REAL\n);",
          "regexp": "\\bBINARY_FLOAT\\b",
          "recommend": "不支持BINARY_FLOAT类型",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数据类型-数值",
          "syntax": "int/integer/smallint",
          "originExample": "drop table scan_test.datatype_ansisql;\ncreate table scan_test.datatype_ansisql (\n\tcol1 INT,\n\tcol2 INTEGER,\n\tcol3 SMALLINT\n);",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数据类型-数值",
          "syntax": "FLOAT类型精度",
          "originExample": "drop table scan_test.datatype_float;\ncreate table scan_test.datatype_float (\n\tcol1 FLOAT(54)\n);",
          "regexp": "\\bFLOAT\\s*\\(\\s*([0]*(5[4-9]|[6-9]\\d|[1-9]\\d{2,}))\\s*\\)",
          "recommend": "GaussDB-Oracle中FLOAT(p)精度需小于54",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数据类型-日期",
          "syntax": "日期时间和间隔类型",
          "originExample": "drop table scan_test.datatype_date;\ncreate table scan_test.datatype_date (\n\tcol1 DATE,\n\tcol2 TIMESTAMP,\n\tcol3 TIMESTAMP(5),\n\tcol4 TIMESTAMP WITH TIME ZONE,\n\tcol5 TIMESTAMP(3) WITH TIME ZONE,\n\tcol6 TIMESTAMP WITH LOCAL TIME ZONE,\n\tcol7 TIMESTAMP(4) WITH LOCAL TIME ZONE,\n\tcol8 interval year to MONTH,\n\tcol9 interval year(3) to MONTH,\n\tcol10 interval day to SECOND,\n\tcol11 interval day(3) to SECOND(9)\n);",
          "regexp": "\\bTIMESTAMP(\\s*\\(\\s*[0]*\\d\\s*\\))?\\s+WITH\\s+LOCAL\\s+TIME\\s+ZONE",
          "recommend": "TIMESTAMP 不支持 WITH LOCAL TIME ZONE",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数据类型-rowid",
          "syntax": "ROWID",
          "originExample": "create table scan_test.datatype_rowid (\n\tcol1 ROWID,\n\tcol2 INT\n);",
          "regexp": "\\bCREATE\\s+((GLOBAL|PRIVATE)\\s+TEMPORARY)?TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*\\([\\s\\S]+?\\bROWID\\b[\\s\\S]*?\\)",
          "recommend": "GaussDB-Oracle不支持ROWID数据类型，使用单字段主键或系统生成唯一标识符代替",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "数据类型-大对象",
          "syntax": "BLOB/CLOB/NCLOB",
          "originExample": "drop table scan_test.datatype_bigobj;\ncreate table scan_test.datatype_bigobj (\n\tcol1 BLOB,\n\tcol2 CLOB,\n\tcol3 NCLOB\n);",
          "regexp": "\\bCREATE\\s+((GLOBAL|PRIVATE)\\s+TEMPORARY)?TABLE\\s+(\\w+|\\\"\\w+\\\")(\\.(\\w+|\\\"\\w+\\\"))?\\s*\\([\\s\\S]+?\\bNCLOB\\b[\\s\\S]*?\\)",
          "recommend": "GaussDB-Oracle不支持NCLOB数据类型",
          "isSupportUnisql": "Y",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "COMMIT",
          "originExample": "drop table scan_test.employees_dcl;\nCREATE TABLE scan_test.employees_dcl (\n    employee_id NUMBER,\n    department_id NUMBER,\n    salary NUMBER,\n    commission_pct NUMBER\n);\n\nINSERT INTO scan_test.employees_dcl (employee_id, department_id, salary, commission_pct)\nVALUES (1, 100, 5000, 0.1);\nINSERT INTO scan_test.employees_dcl (employee_id, department_id, salary, commission_pct)\nVALUES (2, 100, 6000, 0.2);\nINSERT INTO scan_test.employees_dcl (employee_id, department_id, salary, commission_pct)\nVALUES (3, 100, 4500, 0.15);\nCOMMIT;\n\nselect * from scan_test.employees_dcl;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "SET TRANSACTION",
          "originExample": "SET transaction read only;\nSET transaction read WRITE;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "SET ROLE",
          "originExample": "CREATE ROLE tr1;\nSET ROLE tr1 IDENTIFIED BY 123456;\nSET ROLE ALL;\nSET ROLE NONE;",
          "regexp": "/bSET\\s+ROLE\\s+",
          "recommend": "GaussDB-Oracle中SET ROLE语法不同",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "ALTER SYSTEM",
          "originExample": "ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;\nALTER SYSTEM FLUSH SHARED_POOL;\nALTER SYSTEM CHECKPOINT;\nALTER SYSTEM KILL SESSION '<sid>, <serial>';",
          "regexp": "\\bALTER\\s+SYSTEM\\s+(?!\\s*KILL\\s+SESSION\\s+)",
          "recommend": "GaussDB中ALTER SYSTEM仅支持KILL SESSION，不支持其余操作",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "ALTER SESSION",
          "originExample": "ALTER SESSION ENABLE PARALLEL DML;\nALTER SESSION SET NLS_DATE_FORMAT = 'YYYY MM DD HH24:MI:SS';\nALTER SESSION SET QUERY_REWRITE_ENABLED = TRUE;",
          "regexp": "\\bALTER\\s+SESSION\\s+",
          "recommend": "GaussDB中ALTER SESSION用法不同",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "COMMENT",
          "originExample": "CREATE VIEW scan_test.v1 AS\n\tSELECT SUM(salary) s1 FROM scan_test.employees_dcl;\n\nCOMMENT ON MATERIALIZED VIEW scan_test.v1 IS 'View 1 of Test';",
          "regexp": "\\bCOMMENT\\s+ON\\s+(AUDIT\\s+POLICY|EDITION|INDEXTYPE|MATERIALIZED\\s+VIEW|MINING\\s+MODEL)",
          "recommend": "GaussDB中支持注释的对象不同",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "GRANT",
          "originExample": "GRANT SELECT ON scan_test.employees_dcl TO tr1;\nGRANT tr1 TO tr2;",
          "regexp": "",
          "recommend": "支持GRANT的常用用法，部分用法不兼容暂不罗列支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "REVOKE",
          "originExample": "REVOKE DROP ANY TABLE FROM tr1, tr2;",
          "regexp": "",
          "recommend": "支持REVOKE的常用用法，部分用法不兼容暂不罗列支持",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "ROLLBACK",
          "originExample": "DECLARE\n\tTOTALSALARY NUMBER;\nBEGIN\n\tUPDATE scan_test.employees_dcl \n\t    SET salary = 7000 \n\t    WHERE employee_id = 1;\n\tSAVEPOINT p1;\n\n\tUPDATE scan_test.employees_dcl \n\t    SET salary = 12000 \n\t    WHERE employee_id = 2;\n\tSAVEPOINT p2;\n\n\tROLLBACK TO SAVEPOINT p1;\n\n\tSELECT SUM(salary) INTO TOTALSALARY FROM scan_test.employees_dcl;\n\n\tUPDATE scan_test.employees_dcl \n\t    SET salary = 11000 \n\t    WHERE employee_id = 3;\n\n\tCOMMIT;\n\tDBMS_OUTPUT.PUT_LINE(TOTALSALARY);\n--\tDBE_OUTPUT.PRINT_LINE(TOTALSALARY);\nEND;\n\nSELECT * FROM scan_test.employees_dcl;",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "DCL",
          "syntax": "SAVEPOINT",
          "originExample": "示例同上",
          "regexp": "",
          "recommend": "",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "SQL PLUS",
          "syntax": "define",
          "originExample": "define a = 1;",
          "regexp": "\\bDEFINE\\s+",
          "recommend": "gsql不支持define",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "SQL PLUS",
          "syntax": "prompt",
          "originExample": "PROMPT hello;",
          "regexp": "\\bPROMPT\\s+",
          "recommend": "gsql不支持prompt",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "SQL PLUS",
          "syntax": "serveroutput",
          "originExample": "set serveroutput on;\nshow serveroutput;",
          "regexp": "\\bSERVEROUTPUT\\b",
          "recommend": "gsql不支持serveroutput",
          "isSupportUnisql": "N",
          "level": "阻断"
        },
        {
          "desc": "SQL PLUS",
          "syntax": "spool",
          "originExample": "spool d:\\test_spool.txt;\nSELECT * FROM scan_test.employees_dcl;\nspool off;",
          "regexp": "\\bSPOOL\\s+",
          "recommend": "gsql不支持spool",
          "isSupportUnisql": "N",
          "level": "阻断"
        }
      ]
    }
  }
}