将参数传递给存储过程时出现问题

时间:2019-09-06 09:52:49

标签: mariadb

我不知道如何传递自定义表名称(例如prepAccTN),从而使SP在不使用ERROR 1146 (42S02): Table '[my-schema-name].prepacctn' doesn't exist的情况下得以执行

尝试像这样执行

CALL Bill_UpdateUnbalancedPrepaidAccounts('correct_table_name', 'boo', 3);
CALL Bill_UpdateUnbalancedPrepaidAccounts("correct_table_name", 'boo', 3);
CALL Bill_UpdateUnbalancedPrepaidAccounts("my-schema-name.correct_table_name", 'boo', 3);

全部失败!

CREATE PROCEDURE Bill_UpdateUnbalancedPrepaidAccounts(prepAccTN VARCHAR(100), wtrTN VARCHAR(100), prepAccId INT)
BEGIN
  UPDATE prepAccTN SET `unbalanced` = (
    SELECT SUM(`chargesecs`) FROM wtrTN WHERE `prepaidaccount` = prepAccId AND `prepaccsettl` = 0
  ) WHERE `id` = prepAccId;
END//
DELIMITER ;

2 个答案:

答案 0 :(得分:1)

如果确实需要将表名称作为参数传递给存储过程,则需要使用prepared statements。您不能在查询中直接使用该参数。

答案 1 :(得分:0)

尝试了准备好的语句,但是不幸的是它们不能在存储过程中使用!因此,我现在不使用SP并将整个必要的代码(返回)放入触发器中。不是最好的首选方式,但是对我来说还可以,我必须执行的小SQL代码