【问题标题】:Stored procedure using insert and select statements使用插入和选择语句的存储过程
【发布时间】:2016-04-11 11:26:20
【问题描述】:

我想使用电子邮件从 ADMIN 表中获取 adminID,并将 adminID 保存在 product 表中。我试过这样做,它在 Product 表的 adminID 中返回 null 。请让我知道我在哪里犯了错误。

CREATE PROCEDURE prc_saveProduct
(
    IN inputuserEmail VARCHAR(255),
    inputproductName VARCHAR(255),
    inputpoints INT(11),
)
BEGIN 
    SET @AdminID = (SELECT AdminID FROM ADMIN WHERE email = inputuserEmail );

    INSERT INTO PRODUCTS(AdminID, productName, points)
    VALUES (@AdminID, inputproductName, inputpoints);
END

【问题讨论】:

  • 你能发布你的表架构和数据吗
  • 在您的插入语句中,点和输入点后不能有逗号“,”,这是您的问题。我在下面发布了完整的答案,并带有更正的插入语句语法。在 INT(11) 之后声明 proc 的参数时还有一个额外的逗号。

标签: mysql select stored-procedures insert


【解决方案1】:

这会奏效。

DELIMITER $$

CREATE PROCEDURE `yourSchema`.`prc_saveProduct`(
    p_inputuserEmail VARCHAR(255), 
    p_inputproductname VARCHAR(255),
    p_inputpoints INT(11)
)
    BEGIN

    DECLARE _AdminID VARCHAR(255);

    SELECT
        AdminID FROM ADMIN WHERE email = p_inputuserEmail
    INTO
        _AdminID;

    INSERT INTO PRODUCTS(
    AdminID, 
    productName, 
    points
    )
    VALUES
    (
    _AdminID,
    p_inputproductName,
    p_inputpoints
    );  


    END$$

DELIMITER ;

p_ 不是必需的,我只是想在 proc 参数前面加上它来区分它。我喜欢将下划线用于局部变量“_AdminID”,但这也不是必需的。我只是更喜欢那些命名约定。

【讨论】:

  • 您已将会话变量更改为本地。它有什么影响。它会起作用吗??
  • 它会起作用的。只有在他调用此存储过程后,他需要在其他进程中使用该会话变量才能具有 AdminID 值以便稍后在同一会话中使用它,才会产生影响。
  • 对不起,这是我的错误...没有更多的值这就是为什么...在编辑时我忘了去掉那些逗号的@Jordan
猜你喜欢
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多