MariaDB pl/sql 填充日期从“1990-01-01”到“2000-12-31”的表
Posted
技术标签:
【中文标题】MariaDB pl/sql 填充日期从“1990-01-01”到“2000-12-31”的表【英文标题】:MariaDB pl/sql to populate a table with dates from '1990-01-01' to '2000-12-31' 【发布时间】:2019-12-20 14:33:31 【问题描述】:我尝试创建一个过程或函数来填充 MariaDB 中的表名 Time_Dim。
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; /
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'LOOP 附近使用的正确语法 SET vyear_id = YEAR(vdate_id); 在第 13 行设置 vQuarter = QUA'
【问题讨论】:
您查看手册了吗?因为它确实在其中有什么问题。 'PL/SQL' 是 Oracle 数据库内编程语言的名称。我推测 MariaDB 有 Oracle 兼容模式,但上面的代码不是 PL/SQL。 这能回答你的问题吗? mariadb fonction, procedure error You have an error in your SQL 威廉·罗伯逊你说得对,我们怎么称呼玛丽亚的数据库编程语言?是的,markusjm,它确实回答了我的问题。 【参考方案1】:MariaDB 中 while 的语法是:
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
https://mariadb.com/kb/en/library/while/
您不应使用“LOOP”关键字
【讨论】:
【参考方案2】:你可以使用Sequence Storage Engine:
-- SELECT
-- DATEDIFF('2002-12-31', '1990-01-01'); -- 4747
INSERT INTO `Time_Dim` (
`vdate_id`,
`vyear_id`,
`vquarter`,
`vMonth_Name`,
`vweekly_Name`,
`vMonth_Num`,
`vweekday_Num`
)
SELECT
`der`.`day`,
YEAR(`der`.`day`),
QUARTER(`der`.`day`),
MONTHNAME(`der`.`day`),
DAYOFWEEK(`der`.`day`),
MONTH(`der`.`day`),
WEEKDAY(`der`.`day`)
FROM (
SELECT
'1990-01-01' + INTERVAL (`seq`) DAY `day`
FROM
`seq_0_to_4747`
) `der`;
见dbfiddle。
【讨论】:
以上是关于MariaDB pl/sql 填充日期从“1990-01-01”到“2000-12-31”的表的主要内容,如果未能解决你的问题,请参考以下文章