kundb如何在命令行下创建存储过程或者函数

  SQL报错
内容纲要

概要描述


本文主要介绍,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 ;

file

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语句主要用于:

  1. 存储过程和函数,修改结束符为END
  2. 触发器,修改结束符为END
  3. 批量执行多条语句,修改结束符为非默认;符号

DELIMITER非常有用;熟练使用DELIMITER可以更优雅和高效地编写KUNDB的存储过程、触发器和批处理语句。

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。