内容纲要
概要描述
本文主要介绍,kundb如何通过设置DELIMITER分隔符,在后台命令行执行function或者procedure。
详细介绍
1、使用说明
# 这里我们设置分隔符为//
MySQL [(none)]> DELIMITER //
# 在下面的语句块中,最后的end;后面使用// 作为结束符号
MySQL [(none)]> create function db1.f_convert_timer_to_utc(pi_timer bigint) returns timestamp(6)
-> DETERMINISTIC
-> begin
-> declare value_utc_time timestamp(6);
-> select FROM_UNIXTIME( (unix_timestamp(sysdate()) - variable_value) + pi_timer/1000000000000 ) from performance_schema.global_status where variable_name = 'Uptime' into value_utc_time;
-> return value_utc_time;
-> end;//
Query OK, 0 rows affected (0.02 sec)
# 输入下面的命令即可恢复为默认的分隔符
MySQL [(none)]> DELIMITER ;
2、详细介绍:
在KUNDB中,DELIMITER 语句用于改变SQL语句的分隔符。
默认情况下,KUNDB将;
(分号)作为一条语句的结束符和分隔符。这意味着,KUNDB会将 ‘;’ 之前的所有内容作为一条完整的SQL语句执行。
但是,有些情况下我们希望使用其他符号作为语句分隔符,以实现一些特殊的效果。这时,就可以使用DELIMITER语句修改分隔符。
DELIMITER的语法很简单,如:
DELIMITER new_delim
这会将语句分隔符修改为new_delim。新的分隔符可以是一个符号,也可以是多个字符。
常见的使用DELIMITER的情况有:
2.1. 存储过程和函数
存储过程和函数中的SQL语句我们通常不想用;
结束,而希望一直编写到 END 或 END IF 为止。 此时可以使用DELIMITER修改分隔符。
例如:
DELIMITER $$
CREATE PROCEDURE myproc()
BEGIN
SELECT * FROM tbl;
END$$
2.2. 触发器
触发器体中也包含多条SQL语句,也需要修改分隔符。例如:
DELIMITER $$
CREATE TRIGGER mytrigger
BEFORE INSERT ON tbl
FOR EACH ROW
BEGIN
INSERT INTO tbl_log VALUES (NEW.id, NEW.name);
END$$
2.3. 批量执行多条语句
有时候我们想在KUNDB客户端执行多条语句,而不希望每条语句结束时按回车。这时可以修改分隔符,将多条语句写在一起,最后用分隔符结束。例如:
DELIMITER ;;
SELECT * FROM tbl; INSERT INTO tbl VALUES (1, 'a');;;
这会同时执行两条SQL语句。
所以,总结来说,DELIMITER语句主要用于:
- 存储过程和函数,修改结束符为END
- 触发器,修改结束符为END
- 批量执行多条语句,修改结束符为非默认
;
符号
DELIMITER非常有用;熟练使用DELIMITER可以更优雅和高效地编写KUNDB的存储过程、触发器和批处理语句。