Oracle兼容-语法-Oracle COMMENT
1. 语法
在 ORACLE 模式下,GreatSQL客户端支持Oracle风格注释用法:
- 支持Oracle风格的注释符,即在
--后直接添加注释内容,无需像在GreatSQL原生模式下,必须在注释符后紧跟空格才行。 - 在SQL语句、视图、函数、存储过程、触发器、包中支持Oracle风格注释符。
1. SET sql_mode = ORACLE;
3. --comment notes
5. -- comment notes
2. Oracle兼容说明
GreatSQL客户端在处理注释符后 是否立即紧跟空格 时有所区别:
- 切换到ORACLE模式后,GreatSQL客户端支持在注释符
--后立即紧跟注释内容,而无需添加空格。 - 在GreatSQL客户端中,如果注释符
--后没有紧跟空格,则注释内容中出现第一个分号;后会被当做结束符(前提是此时分隔符也是分号;,即DELIMITER ;),结束符之后的内容会被当做SQL请求提交。如果注释符--后紧跟空格,则在同一行范围内,所有内容都会被视为注释内容,不会被做SQL请求提交。 - 每一个注释符
--只能覆盖同一行范围,另起一行时,需要再次添加注释符才行,否则会被当做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. +---+---+---+
问题反馈
联系我们
扫码关注微信公众号

