在GBase 8a数据库里,默认采用分号作为语句的结束符,以及多个语句间的分割符,本文介绍其使用和修改方法。
目录导航
修改方法
delimiter <NEWSIGN>
比如,当前分割符是逗号,要改成两个左斜杠 //。修改后,SQL语句将会把下一个分隔符之前的所有内容,作为一个SQL进行解析。
gbase> select now();
+---------------------+
| now() |
+---------------------+
| 2021-03-09 09:49:17 |
+---------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> delimiter //
gbase> select now();
-> //
+---------------------+
| now() |
+---------------------+
| 2021-03-09 09:49:28 |
+---------------------+
1 row in set (Elapsed: 00:00:00.01)
gbase> delimiter ;
gbase> select now();//
+---------------------+
| now() |
+---------------------+
| 2021-03-09 09:49:42 |
+---------------------+
1 row in set (Elapsed: 00:00:00.00)
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your GBase server version for the right syntax to use near '//' at line 1
gbase>
样例
单个SQL
在命令行交互模式,必须输入结束符或分隔符,才会执行SQL,在开发接口,比如JDBC,ODBC里,执行单个SQL是必须要输入的。
命令行交互模式
如果采用交互模式,比如命令行客户端,则必须输入结束符,才会发送到服务器端执行,比如
gbase> select
-> now()
-> from
-> dual
->
->
->
-> ;
+---------------------+
| now() |
+---------------------+
| 2021-03-09 09:41:12 |
+---------------------+
1 row in set (Elapsed: 00:00:00.34)
如果不输入结束符,则会一直等待输入。
批量模式或开发接口
比如在命令将使用-e执行,则不需要输入分隔符。当然加上分隔符也不会报错。
[gbase@gbase_rh7_001 ~]$ gccli -e"select now() from dual"
+---------------------+
| now() |
+---------------------+
| 2021-03-09 09:44:17 |
+---------------------+
[gbase@gbase_rh7_001 ~]$ gccli -e"select now() from dual;"
+---------------------+
| now() |
+---------------------+
| 2021-03-09 09:44:21 |
+---------------------+
[gbase@gbase_rh7_001 ~]$
多个独立SQL
多个独立的SQL各自执行,则必须要在SQL中间加上分隔符。比如
[gbase@gbase_rh7_001 ~]$ gccli -e"select now() from dual;select 1234;"
+---------------------+
| now() |
+---------------------+
| 2021-03-09 09:46:02 |
+---------------------+
+------+
| 1234 |
+------+
| 1234 |
+------+
[gbase@gbase_rh7_001 ~]$
如上2个SQL各自执行,分别输出结果,没有任何关联。
关联SQL(自定义函数和存储过程)
此时需要一个新的分隔符,来表示2个分隔符之间的SQL,是一个整体。
delimiter //
XXXXXX;
XXXXXXXXX
XXXXXXXXXXXXXXX
XXXX //
一个存储过程的样例请参考 GBase 8a集群存储过程样例,动态存储过程