添加语句的存储过程

DDL

CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,
    createDate DATE NOT NULL,
    userName VARCHAR(255) NOT NULL,
    phone VARCHAR(15),
    age INT,
    sex ENUM('M', 'F', 'O') NOT NULL,  -- 假设'M'代表男,'F'代表女,'O'代表其他
    introduce TEXT
);

DELIMITER //

CREATE PROCEDURE InsertStudent(
    IN p_userName VARCHAR(255),
    IN p_age INT,
    IN p_introduce TEXT
)
BEGIN
    DECLARE v_random_date DATE;
    DECLARE v_random_phone VARCHAR(15);
    DECLARE v_random_sex ENUM('M', 'F', 'O');
    DECLARE v_username_prefix VARCHAR(1);

    -- 验证输入参数不为空
    IF p_userName IS NULL OR p_age IS NULL OR p_introduce IS NULL THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '输入的数据不允许为空';
    END IF;

    -- 验证userName不以张、王、李、赵开头
    SET v_username_prefix = LEFT(p_userName, 1);
    IF v_username_prefix IN ('张', '王', '李', '赵') THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'userName的名称不允许以张、王、李、赵开头';
    END IF;

    -- 生成随机日期
    SET v_random_date = DATE_SUB(CURDATE(), INTERVAL FLOOR(RAND() * 3650) DAY); -- 随机过去10年内的日期

    -- 生成随机电话号码
    SET v_random_phone = CONCAT(
        FLOOR(RAND() * (999999999999999 - 100000000000000 + 1)) + 100000000000000
    );

    -- 生成随机性别
    SET v_random_sex = ELT(1 + FLOOR(RAND() * 3), 'M', 'F', 'O');

    -- 插入数据
    INSERT INTO student (createDate, userName, phone, age, sex, introduce)
    VALUES (v_random_date, p_userName, v_random_phone, p_age, v_random_sex, p_introduce);
END //

DELIMITER ;
CALL InsertStudent('不是张王李赵开头', 20, '这是一个介绍');

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值