Function mariadb操作,过程错误SQL中有错误 分隔符/ 创建函数filltimeDim() 开始 声明vquartervarchar(6); 声明vMonth_名称VARCHAR(20); 声明vdate_id日期; 声明vyear_id CHAR(4); 声明vweekly_Name VARCHAR(20); 宣布第五个月(10); 宣布星期五(10); 开始 设置vdate_id=转换('1998-01-01',日期); 而(CONVERT('vdate_id'使用utf8)
您可能希望创建一个而不是一个函数 此外,MariaDB使用Function mariadb操作,过程错误SQL中有错误 分隔符/ 创建函数filltimeDim() 开始 声明vquartervarchar(6); 声明vMonth_名称VARCHAR(20); 声明vdate_id日期; 声明vyear_id CHAR(4); 声明vweekly_Name VARCHAR(20); 宣布第五个月(10); 宣布星期五(10); 开始 设置vdate_id=转换('1998-01-01',日期); 而(CONVERT('vdate_id'使用utf8),function,mariadb,procedure,Function,Mariadb,Procedure,您可能希望创建一个而不是一个函数 此外,MariaDB使用DO关键字而不是LOOP来标记循环的开始和结束。下面是成功完成的SQL的固定版本: DELIMITER / CREATE FUNCTION filltimeDim () BEGIN DECLARE vQuarter VARCHAR(6); DECLARE vMonth_Name VARCHAR(20); DECLARE vdate_id date; DECLARE vyear_id CHAR(4);
DO
关键字而不是LOOP
来标记循环的开始和结束。下面是成功完成的SQL的固定版本:
DELIMITER /
CREATE FUNCTION filltimeDim ()
BEGIN
DECLARE vQuarter VARCHAR(6);
DECLARE vMonth_Name VARCHAR(20);
DECLARE vdate_id date;
DECLARE vyear_id CHAR(4);
DECLARE vweekly_Name VARCHAR(20);
DECLARE vMonth_Num TINYINT(10);
DECLARE vweekday_Num TINYINT(10);
BEGIN
SET vdate_id = CONVERT('1998-01-01', DATE);
WHILE (CONVERT('vdate_id' USING utf8) <= '2002-12-31')
LOOP
SET vyear_id = YEAR(vdate_id);
SET vQuarter = QUARTER(vdate_id);
SET vMonth_Name = MONTHNAME(vdate_id);
SET vweekly_Name = DAYOFWEEK(vdate_id);
SET vMonth_Num = MONTH(vdate_id);
SET vweekday_Num = WEEKDAY(vdate_id);
INSERT INTO Time_Dim VALUES
(vdate_id, vyear_id, vquarter, vMonth_Name,vweekly_Name,vMonth_Num,vweekday_Num);
SET vdate_id = vdate_id + 1;
END LOOP;
END;
END; /
分隔符//
创建过程filltimeDim()
开始
声明vquartervarchar(6);
声明vMonth_名称VARCHAR(20);
声明vdate_id日期;
声明vyear_id CHAR(4);
声明vweekly_Name VARCHAR(20);
宣布第五个月(10);
宣布星期五(10);
开始
设置vdate_id=转换('1998-01-01',日期);
WHILE(转换(使用utf8的vdate_id)您正在显式声明一个函数。它需要在开始之前进行返回声明。请查看文档:您真的需要转换
?数据类型日期和字符串应该是兼容的。并且SET vdate\u id=vdate\u id+1;
不能与日期
一起使用。请改为SET vDATEYID= VDATEYID +间隔1天;一个“TimeSimDIM”维度表通常对于数据仓库来说是个坏主意,至少当您开始使用DIM表进行查找时(如查找所有“星期一”行)。;这可以避免光标等。谢谢!哦!我来晚了。无论如何,在花了一些时间编写MariaDB文档后,我成功地完成了这项工作并使其正常工作,是的,我需要一个过程。我不太了解日期算术和数字算术。如果您使用日期作为数据类型,则必须以+间隔1天
将它们递增>,否则会出现错误。
DELIMITER //
CREATE PROCEDURE filltimeDim ()
BEGIN
DECLARE vQuarter VARCHAR(6);
DECLARE vMonth_Name VARCHAR(20);
DECLARE vdate_id date;
DECLARE vyear_id CHAR(4);
DECLARE vweekly_Name VARCHAR(20);
DECLARE vMonth_Num TINYINT(10);
DECLARE vweekday_Num TINYINT(10);
BEGIN
SET vdate_id = CONVERT('1998-01-01', DATE);
WHILE (CONVERT(vdate_id USING utf8) <= '2002-12-31')
DO
SET vyear_id = YEAR(vdate_id);
SET vQuarter = QUARTER(vdate_id);
SET vMonth_Name = MONTHNAME(vdate_id);
SET vweekly_Name = DAYOFWEEK(vdate_id);
SET vMonth_Num = MONTH(vdate_id);
SET vweekday_Num = WEEKDAY(vdate_id);
INSERT INTO Time_Dim VALUES
(vdate_id, vyear_id, vquarter, vMonth_Name,vweekly_Name,vMonth_Num,vweekday_Num);
SET vdate_id = vdate_id + INTERVAL 1 DAY;
END WHILE;
END;
END; //