Oracle兼容-语法-Oracle COMMENT


1. 语法

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

  1. 支持Oracle风格的注释符,即在 -- 后直接添加注释内容,无需像在GreatSQL原生模式下,必须在注释符后紧跟空格才行。

  2. 在SQL语句、视图、函数、存储过程、触发器、包中支持Oracle风格注释符。

  1. SET sql_mode = ORACLE;
  2. --comment notes
  3. -- comment notes

2. Oracle兼容说明

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

  1. 切换到ORACLE模式后,GreatSQL客户端支持在注释符--后立即紧跟注释内容,而无需添加空格。

  2. 在GreatSQL客户端中,如果注释符 -- 后没有紧跟空格,则注释内容中出现第一个分号;后会被当做结束符(前提是此时分隔符也是分号;,即DELIMITER ;),结束符之后的内容会被当做SQL请求提交。如果注释符 -- 后紧跟空格,则在同一行范围内,所有内容都会被视为注释内容,不会被做SQL请求提交。

  3. 每一个注释符 -- 只能覆盖同一行范围,另起一行时,需要再次添加注释符才行,否则会被当做SQL请求提交。

几个示例展示区别:

  1. greatsql> SET sql_mode = ORACLE;
  2. -- 1. 注释符后没有紧跟空格,出现第一个分号;后会被当做结束符,结束符之后的内容会被当做SQL请求提交。
  3. greatsql> --a;b;
  4. Query OK, 0 rows affected (0.00 sec)
  5. 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
  6. -- 将分隔符修改成不是分号
  7. greatsql> DELIMITER //
  8. greatsql> --a;b; //
  9. Query OK, 0 rows affected (0.00 sec)
  10. greatsql> DELIMITER ;
  11. -- 2. 如果注释符 `--` 后紧>跟空格,则在同一行范围内,所有内容都会被视为注释内容,不会被做SQL请求提交。
  12. greatsql> -- a;b;
  13. greatsql>
  14. -- 3. 每一个注释符 `--` 只能覆盖同一行范围,另起一行时,需要再次添加注释符才行,否则会被当做SQL请求提交。
  15. greatsql> --a
  16. -> b;
  17. 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)
  3. greatsql> INSERT INTO t1 VALUES(1,1,1), (10,10,10), (20,20,20);
  • 示例1. 常规用法
  1. greatsql> SET sql_mode = DEFAULT;
  2. -- DEFAULT模式下,不支持不带空格的注释符,会被当做运算符处理
  3. greatsql> SELECT t1.a --t1.b
  4. , t1.c FROM t1;
  5. +-------------+----+
  6. | t1.a --t1.b | c |
  7. +-------------+----+
  8. | 2 | 1 |
  9. | 20 | 10 |
  10. | 40 | 20 |
  11. +-------------+----+
  12. -- DEFAULT模式下,注释符后必须带空格
  13. greatsql> SELECT t1.a -- t1.b
  14. , t1.c FROM t1;
  15. +----+----+
  16. | a | c |
  17. +----+----+
  18. | 1 | 1 |
  19. | 10 | 10 |
  20. | 20 | 20 |
  21. +----+----+
  22. -- 切换到ORACLE模式,注释符后是否紧跟空格的效果是一样的
  23. greatsql> SET sql_mode = ORACLE;
  24. greatsql> SELECT t1.a,
  25. --t1.b,
  26. t1.c
  27. FROM t1;
  28. +----+----+
  29. | a | c |
  30. +----+----+
  31. | 1 | 1 |
  32. | 10 | 10 |
  33. | 20 | 20 |
  34. +----+----+
  35. greatsql> SELECT t1.a,
  36. -- t1.b,
  37. t1.c
  38. FROM t1;
  39. +----+----+
  40. | a | c |
  41. +----+----+
  42. | 1 | 1 |
  43. | 10 | 10 |
  44. | 20 | 20 |
  45. +----+----+
  • 示例2. 在视图(VIEW)中使用注释符
  1. -- 在示例1的基础上创建视图
  2. greatsql> SET sql_mode = ORACLE;
  3. greatsql> CREATE VIEW v1 AS--SELECT SYSDATE FROM DUAL
  4. --SELECT SYSDATE FROM DUAL
  5. SELECT * FROM t1;
  6. greatsql> SELECT * FROM v1;
  7. +----+----+----+
  8. | a | b | c |
  9. +----+----+----+
  10. | 1 | 1 | 1 |
  11. | 10 | 10 | 10 |
  12. | 20 | 20 | 20 |
  13. +----+----+----+
  • 示例3. 在存储过程(STORE PROCEDURE)中使用注释符
  1. -- 在示例1的基础上创建存储过程
  2. greatsql> SET sql_mode = ORACLE;
  3. greatsql> DELIMITER //
  4. greatsql> CREATE OR REPLACE PROCEDURE p1 AS--SELECT SYSDATE AS D1 FROM DUAL
  5. --SELECT SYSDATE AS D2 FROM DUAL
  6. BEGIN--SELECT SYSDATE AS D5 FROM DUAL
  7. --SELECT SYSDATE AS D6 FROM DUAL
  8. SELECT * FROM t1 WHERE a=1;--SELECT SYSDATE AS D7 FROM DUAL
  9. --SELECT SYSDATE AS D8 FROM DUAL
  10. end;--SELECT SYSDATE AS D8 FROM DUAL
  11. //
  12. greatsql> CALL p1() //
  13. +---+---+---+
  14. | a | b | c |
  15. +---+---+---+
  16. | 1 | 1 | 1 |
  17. +---+---+---+

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx