1)下面是我正在尝试的程序,我需要比较来自两个不同表的计数。 (tbl1和tbl2在要传递的参数中)。 但在上面的代码中,'a'和'b'的值被设置为语句。我需要两个语句中的结果值(count)在'IF'条件下进行比较。
declare a integer;
declare b integer;
set @a:=concat('select count(*) from ', tbl1);
/*PREPARE stmt1 FROM @a;
execute stmt1;
deallocate PREPARE stmt1;*/
set @b:= concat('select count(*) from ', tbl2);
/*PREPARE stmt2 FROM @b;
execute stmt2;
deallocate PREPARE stmt2;*/
if
@a=@b
then
select 1;
else
select 2;
end if;
2)实际上,我遇到了将'tbl1'和'tbl2'设置为过程中的参数的问题。 如果直接给出表名,下面的代码可以正常工作,但我需要它们作为参数。
CREATE PROCEDURE myproc (in tbl1 varchar(50), in tbl2 varchar(50))
declare a integer;
declare b integer;
set @a:=(select count(*) from tbl1);
/*PREPARE stmt1 FROM @a;
execute stmt1;
deallocate PREPARE stmt1;*/
set @b:= (select count(*) from tbl2);
/*PREPARE stmt2 FROM @b;
execute stmt2;
deallocate PREPARE stmt2;*/
if
@a=@b
then
select 1;
else
select 2;
end if;
希望那里的任何人都可以帮助我解决问题。
答案 0 :(得分:0)
正如上面的评论中所提到的,你可能根本就不应该这样做......但是,为了它的价值:
SET @sql := CONCAT('SELECT (
SELECT COUNT(*) FROM `',REPLACE('`','``',tbl1),'`
) = (
SELECT COUNT(*) FROM `',REPLACE('`','``',tbl2),'`
);');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @sql := NULL;
REPLACE()
已经被用来尝试避免SQL注入(它有些粗糙,但它是没有更多信息的最佳方法)。