微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据条件创建插入函数

如何解决如何根据条件创建插入函数

我的功能有点问题。我收到一个语法错误,我不知道如何一次性插入多个内容

基本上我希望 safe_insert() 函数接受:

  • _museum_id id 表中的 museums
  • _curr_date 一个日期字符串,例如。 2021-01-23 09:23:48
  • _customers 以逗号分隔的字符串,例如。 bob,billy,zoey,Sarah,heather

但是,当它插入组成员时,它应该在 group_members 中插入 5 行,因为在这种情况下有 5 个名称bob,heather)。

错误/问题:

  • 一个我不知道如何修复的语法错误#1064 - You have an error in your sql Syntax; check the manual that corresponds to your MariaDB server version for the right Syntax to use near '' at line 9
  • 我也不知道如何用逗号分隔字符串以插入 5 行。

表格:

DROP TABLE IF EXISTS group_members;
DROP TABLE IF EXISTS group_visit;
DROP TABLE IF EXISTS museums;
CREATE TABLE museums (

    id                          int
                                NOT NULL
                                AUTO_INCREMENT
                                PRIMARY KEY,name                        varchar(64)
                                not null
);

INSERT INTO museums (id,name) VALUES (1,'dino-museums');

CREATE TABLE group_visit (

    id                          int
                                NOT NULL
                                AUTO_INCREMENT
                                PRIMARY KEY,museum_id                   int
                                NOT NULL,FOREIGN KEY (museum_id) REFERENCES museums (id),date_added                  datetime
                                NOT NULL
);

CREATE TABLE group_members (

    group_visit_id              int
                                NOT NULL,FOREIGN KEY (group_visit_id) REFERENCES group_visit (id),customer                    varchar(32)
                                NOT NULL,PRIMARY KEY (group_visit_id,customer)
);

我的功能

DROP FUNCTION IF EXISTS safe_insert;
    
DELIMITER //
CREATE FUNCTION safe_insert(
    _museum_id INT,_curr_date VARCHAR(32),_customers varchar(1024)
    ) RETURNS int
   
BEGIN
  DECLARE
    should_insert_museum int DEFAULT 1;
    group_visit_id int;
    
    
    /* Check if a group visit with the same museum_id has been inserted in the last 15 minutes */
    SELECT 0 INTO should_insert_museum
    FROM group_visit
    WHERE museum_id = _museum_id
    AND date_added >= DATE_SUB(_curr_date INTERVAL 15 MINUTE);
    
    /* If we found a result,do not insert anything and return 0 */
    IF should_insert_museum = 0 THEN
        RETURN should_insert_museum;
    
    /* Insert a group visit and store the id in group_Visit_id */
    INSERT INTO group_visit (museum_id,date_added) VALUES (_museum_id,_curr_date);
    SELECT LAST_INSERT_ID() INTO group_visit_id;
    
    /* How do I insert the list of customers into group_members */
    
        
  
  RETURN group_visit_id;
  
  
END //
DELIMITER ;

解决方法

我并不是认真地提倡将其作为解决方案,因为我认为应该在应用程序代码中处理这样的事情,但只是为了好玩...

image/jpeg

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。