我不知道如何传递自定义表名称(例如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 ;
答案 0 :(得分:1)
如果确实需要将表名称作为参数传递给存储过程,则需要使用prepared statements。您不能在查询中直接使用该参数。
答案 1 :(得分:0)
尝试了准备好的语句,但是不幸的是它们不能在存储过程中使用!因此,我现在不使用SP并将整个必要的代码(返回)放入触发器中。不是最好的首选方式,但是对我来说还可以,我必须执行的小SQL代码