1) Ниже приведен код, в котором я пытаюсь выполнить процедуру, когда мне нужно сравнить счет из двух разных таблиц. (tbl1 и tbl2 находятся в параметрах, которые должны быть переданы). Но в приведенном выше коде значения для 'a' и 'b' заданы как инструкции. Мне нужно результирующее значение (счет) из двух операторов для сравнения в условии «IF».процедура сравнения результатов двух операторов sql
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
@[email protected]
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
@[email protected]
then
select 1;
else
select 2;
end if;
Надеюсь, что кто-то может помочь мне с решением.
что не так с вышеуказанным кодом? кажется правильным ... –
Что вы пытаетесь сделать? Пожалуйста, объясните немного больше. Похоже, вы усложняете вещи. –
1) Почему у вас есть имена переменных таблиц? Это обычно указывает на плохо денормализованную схему. 2) Это похоже на бизнес-логику - действительно ли она принадлежит базе данных? – eggyal