Mysql函数-无法理解

Mysql函数-无法理解,mysql,Mysql,我正在使用MySql Workbench,我无法理解这一点 delimiter $$ CREATE function `klientu_copy`() DECLARE v_laiks TIMESTAMP; DECLARE v_liet VARCHAR(200); set v_laiks = now(); set v_liet = current_user; if (TG_OP = 'DELETE') THEN insert into kopija_klienti values

我正在使用MySql Workbench,我无法理解这一点

      delimiter $$
CREATE function `klientu_copy`() 
 DECLARE v_laiks TIMESTAMP;
 DECLARE v_liet VARCHAR(200);
set v_laiks = now();
set v_liet = current_user;

if (TG_OP = 'DELETE') THEN
insert into kopija_klienti values (v_liet,v_laiks,old.Vards,old.Uzvards,null,null);
ELSEif (TG_OP = 'INSERT') THEN
insert into kopija_klienti values (v_liet,v_laiks,null,null,new.Vards,new.Uzvards);
ELSEif (TG_OP='UPDATE') THEN
insert into kopija_klienti values (v_liet,v_laiks,old.Vards,old.Uzvards,new.Vards,new.Uzvards);
end if;

END; $$

delimiter ;
21:24:22错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在klientu_copy“BEGIN DECLARE v_laiks timestamp”附近使用的正确语法;宣布v_liet varchar;第1行的s'0.000秒


你试过设置@variable/声明@variable,但没办法解决这个问题。我还在学习:

必须指定varchar变量的长度,如varchar100


也为第一次插入添加结束语。

是的,但这不是代码中的第一个也是唯一的错误。是的,您也没有为第一次插入添加结束语,我已编辑了我的答案。为什么要投反对票?继续搜索。这里有更多的错误。我总共至少数到5;我同意萨尔塔克·夏尔马的观点。将//添加到末尾。在插入kopija_klienti值v_liet、v_laiks、old.Vards、old.Uzvards、null、null的行中缺少一个;忘了在第一次插入时关闭吗?谢谢,我甚至没看到。。。但是仍然有同样的问题:你能用'来划分函数名吗?我通常使用`,并认为是支持与ANSI SQL上;但我从未见过使用单引号。而且,据我所知,NEW仅在某些触发器的上下文中有效;并且您的函数没有返回类型。您可能想从官方文档开始,我在postgresql上有完全相同的代码,但我似乎无法使它在工作台上工作。