mysql - 创建日期维度表时出现 MySQL 语法错误?
问题描述
我从网站复制了一些 MySQL 代码来创建日期维度表,并尝试在 PhpMyAdmin 中的 MySQL 实例上运行它,但出现错误。代码如下:
CREATE TABLE IF NOT EXISTS datedim (
date_id INT NOT NULL auto_increment,
fulldate date,
dayofmonth int,
dayofyear int,
dayofweek int,
dayname varchar(10),
monthnumber int,
monthname varchar(10),
year int,
quarter tinyint,
PRIMARY KEY(date_id)
) ENGINE=InnoDB AUTO_INCREMENT=1000;
delimiter //
DROP PROCEDURE IF EXISTS datedimbuild;
CREATE PROCEDURE datedimbuild (p_start_date DATE, p_end_date DATE)
BEGIN
DECLARE v_full_date DATE;
DELETE FROM datedim;
SET v_full_date = p_start_date;
WHILE v_full_date < p_end_date DO
INSERT INTO datedim (
fulldate ,
dayofmonth ,
dayofyear ,
dayofweek ,
dayname ,
monthnumber,
monthname,
year,
quarter
) VALUES (
v_full_date,
DAYOFMONTH(v_full_date),
DAYOFYEAR(v_full_date),
DAYOFWEEK(v_full_date),
DAYNAME(v_full_date),
MONTH(v_full_date),
MONTHNAME(v_full_date),
YEAR(v_full_date),
QUARTER(v_full_date)
);
SET v_full_date = DATE_ADD(v_full_date, INTERVAL 1 DAY);
END WHILE;
END;
它是在 2009 年发布的,所以不知道问题是什么(也许是分隔符?)。
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“CREATE PROCEDURE datedimbuild (p_start_date DATE, p_end_date DATE) BEGIN D”附近使用正确的语法
https://tech.akom.net/archives/36-Creating-A-Basic-Date-Dimension-Table-in-MySQL.html
我尝试将 phpmyadmin sql 查询中的分隔符更改为//
并删除 sql 代码中的分隔符行,但现在我得到:
2 errors were found during analysis.
Unexpected beginning of statement. (near "p_start_date" at position 415)
Unrecognized statement type. (near "DATE" at position 428)
解决方案
您已将分隔符更改为 // 所以您需要使用 // not ;
任何一个
delimiter //
DROP PROCEDURE IF EXISTS datedimbuild//
CREATE PROCEDURE datedimbuild (p_start_date DATE, p_end_date DATE)
BEGIN
...
或者
DROP PROCEDURE IF EXISTS datedimbuild;
delimiter //
CREATE PROCEDURE datedimbuild (p_start_date DATE, p_end_date DATE)
BEGIN
...
看看这个之前的问题delimiters-in-mysql
推荐阅读
- react-native - 处理 useEffect
- javascript - 将 Google Tag Manager 与 Google Analytics 结合使用来跟踪 Chrome 扩展程序 (2020)
- list - 如何将列表添加到地图
> 动态 - android - Recyclerview 项目 OnTouchListener
- python - 如何在使用 InlineKeyboard Python-Telegarm-Bot 时编辑/删除消息
- javascript - 如何在shopify中访问表单中的数据
- visual-studio-code - Visual Studio Code C++ 格式化程序:使用制表符缩进,与空格对齐?
- reactjs - 收到 json 响应时不显示警报
- c - 如何在 Windows 中的给定用户下创建文件夹?
- c# - 为什么我在此示例中通过套接字传输数据时丢失了字节?