【问题标题】:How to use procedure variable in select and insert query in MySQL?如何在 MySQL 中的 select 和 insert 查询中使用过程变量?
【发布时间】:2014-01-07 09:29:55
【问题描述】:

我有两个变量 1. 插入用户 ID, 2. 插入地址_id

在我的 MySQL 程序中。

我需要在插入查询和选择查询中使用它们。我正在尝试类似的东西

插入 user_new(name, company, email, customer_id) 选择名称, 来自 user_old 的公司、电子邮件、inserted_user_id;

插入 user_address_map(address_id, user_id) 选择 插入的用户标识,插入的地址标识;

有两个语句不起作用。上述sql语句中如何使用过程变量的值?

【问题讨论】:

    标签: mysql sql stored-procedures mysql-workbench


    【解决方案1】:

    首先进行选择以获取所有信息:(您需要先声明这些变量)

    SELECT name, 
           company, 
           email, 
    INTO   varname, varcompany, varemail 
    FROM   user_old 
    

    然后在插入中使用它

    INSERT INTO user_new 
                (name, 
                 company, 
                 email, 
                 customer_id) 
    VALUES      (varname, 
                 varcompany, 
                 varemail, 
                 inserted_user_id); 
    

    编辑: 首先插入 Selected 值并获取插入行的 id

    INSERT INTO user_new 
                (name, 
                 company, 
                 email) 
    SELECT name, 
           company, 
           email 
    FROM   user_old 
    
    SET out_param = last_insert_id(); 
    

    然后用你的参数更新这一行

    UPDATE user_new 
    SET    customer_id = inserted_user_id 
    WHERE  id = out_param; 
    

    【讨论】:

    • 实际上我在 select 语句中有巨大的列列表。并且存储过程包括许多这样的表。如果我为每列创建变量,它将变成 1000 多个变量。这将很难处理。有没有其他方法可以解决这个问题?
    • 该案例尝试将其全部合并:insert into user_new select name as name, company as company, email as email, inserted_user_id as customer_id from user_old); 或类似内容,可在此处找到 link
    • 如果我在 select 语句中使用inserted_user_id,它会编译但在运行时失败。
    • 什么错误给你?你确定它有你想要的价值吗?
    • 另一种方法是先从 select 中插入值,然后使用 insert_user_id 更新最后插入的行。我更改答案以显示它
    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多