Oracle兼容-语法-Oracle COMMENT


1. 语法

在 ORACLE 模式下,GreatSQL客户端支持Oracle风格注释用法:

  1. 支持Oracle风格的注释符,即在 -- 后直接添加注释内容,无需像在GreatSQL原生模式下,必须在注释符后紧跟空格才行。
  2. 在SQL语句、视图、函数、存储过程、触发器、包中支持Oracle风格注释符。
1. SET sql_mode = ORACLE;

3. --comment notes

5. -- comment notes

2. Oracle兼容说明

GreatSQL客户端在处理注释符后 是否立即紧跟空格 时有所区别:

  1. 切换到ORACLE模式后,GreatSQL客户端支持在注释符--后立即紧跟注释内容,而无需添加空格。
  2. 在GreatSQL客户端中,如果注释符 -- 后没有紧跟空格,则注释内容中出现第一个分号;后会被当做结束符(前提是此时分隔符也是分号;,即DELIMITER ;),结束符之后的内容会被当做SQL请求提交。如果注释符 -- 后紧跟空格,则在同一行范围内,所有内容都会被视为注释内容,不会被做SQL请求提交。
  3. 每一个注释符 -- 只能覆盖同一行范围,另起一行时,需要再次添加注释符才行,否则会被当做SQL请求提交。

几个示例展示区别:

1. greatsql> SET sql_mode = ORACLE;

3. -- 1. 注释符后没有紧跟空格,出现第一个分号;后会被当做结束符,结束符之后的内容会被当做SQL请求提交。
4. greatsql> --a;b;
5. Query OK, 0 rows affected (0.00 sec)

7. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b' at line 1

9. -- 将分隔符修改成不是分号
10. greatsql> DELIMITER //
11. greatsql> --a;b; //
12. Query OK, 0 rows affected (0.00 sec)
13. greatsql> DELIMITER ;

15. -- 2. 如果注释符 `--` 后紧>跟空格,则在同一行范围内,所有内容都会被视为注释内容,不会被做SQL请求提交。
16. greatsql> -- a;b;
17. greatsql>

19. -- 3. 每一个注释符 `--` 只能覆盖同一行范围,另起一行时,需要再次添加注释符才行,否则会被当做SQL请求提交。
20. greatsql> --a
21. -> b;
22. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b' at line 2

4. 示例

先创建测试表,并写入数据:

1. greatsql> CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL, c INT NOT NULL);
2. Query OK, 0 rows affected (0.07 sec)

4. greatsql> INSERT INTO t1 VALUES(1,1,1), (10,10,10), (20,20,20);
  • 示例1. 常规用法
1. greatsql> SET sql_mode = DEFAULT;

3. -- 在DEFAULT模式下,不支持不带空格的注释符,会被当做运算符处理
4. greatsql> SELECT t1.a --t1.b
5. , t1.c FROM t1;
6. +-------------+----+
7. | t1.a --t1.b | c  |
8. +-------------+----+
9. |           2 |  1 |
10. |          20 | 10 |
11. |          40 | 20 |
12. +-------------+----+

14. -- 在DEFAULT模式下,注释符后必须带空格
15. greatsql> SELECT t1.a -- t1.b
16. , t1.c FROM t1;
17. +----+----+
18. | a  | c  |
19. +----+----+
20. |  1 |  1 |
21. | 10 | 10 |
22. | 20 | 20 |
23. +----+----+

25. -- 切换到ORACLE模式,注释符后是否紧跟空格的效果是一样的
26. greatsql> SET sql_mode = ORACLE;

28. greatsql> SELECT t1.a,
29. --t1.b,
30. t1.c
31. FROM t1;
32. +----+----+
33. | a  | c  |
34. +----+----+
35. |  1 |  1 |
36. | 10 | 10 |
37. | 20 | 20 |
38. +----+----+

40. greatsql> SELECT t1.a,
41. -- t1.b,
42. t1.c
43. FROM t1;
44. +----+----+
45. | a  | c  |
46. +----+----+
47. |  1 |  1 |
48. | 10 | 10 |
49. | 20 | 20 |
50. +----+----+
  • 示例2. 在视图(VIEW)中使用注释符
1. -- 在示例1的基础上创建视图
2. greatsql> SET sql_mode = ORACLE;

4. greatsql> CREATE VIEW v1 AS--SELECT SYSDATE FROM DUAL
5. --SELECT SYSDATE FROM DUAL
6. SELECT * FROM t1;

8. greatsql> SELECT * FROM v1;
9. +----+----+----+
10. | a  | b  | c  |
11. +----+----+----+
12. |  1 |  1 |  1 |
13. | 10 | 10 | 10 |
14. | 20 | 20 | 20 |
15. +----+----+----+
  • 示例3. 在存储过程(STORE PROCEDURE)中使用注释符
1. -- 在示例1的基础上创建存储过程
2. greatsql> SET sql_mode = ORACLE;

4. greatsql> DELIMITER //
5. greatsql> CREATE OR REPLACE PROCEDURE p1 AS--SELECT SYSDATE AS D1 FROM DUAL
6. --SELECT SYSDATE AS D2 FROM DUAL
7. BEGIN--SELECT SYSDATE AS D5 FROM DUAL
8. --SELECT SYSDATE AS D6 FROM DUAL
9. SELECT * FROM t1 WHERE a=1;--SELECT SYSDATE AS D7 FROM DUAL
10. --SELECT SYSDATE AS D8 FROM DUAL
11. end;--SELECT SYSDATE AS D8 FROM DUAL
12. //

14. greatsql> CALL p1() //
15. +---+---+---+
16. | a | b | c |
17. +---+---+---+
18. | 1 | 1 | 1 |
19. +---+---+---+

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx