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”的表的主要内容,如果未能解决你的问题,请参考以下文章

oracle:使用 PL/sql 过程从另一个模式填充表

从 Oracle PL/SQL 匿名块填充 C# 数据表

PL/SQL 用表中的数据填充对象

pl/sql 存储过程从日期等于存储过程参数的表中进行选择

如何使用 pl/sql 为多行填充相同的值

从 oracle PL/SQL 查看变量的值