drop procedure if exists counttablerows;
create procedure counttablerows(in tablename varchar(10),out count int)
begin
set @sql = concat('select count(*) into @count from ', tablename);
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
set count =@count;
end;
要用表名當引數,就不得不提到prepare預處理語句。
基礎用法:
prepare stmt from '你的sql語句'; //定義預處理語句
execute stmt (如果sql有引數的話, using ***,***); //執行預處理語句
deallocate prepare stmt; //釋放資源
作用:可以在儲存過程中動態的拼接表名,欄位名,來達到動態查詢的效果
sql語句中可以用 ? 萬用字元來代替引數,這樣可以有效的防止sql注入
案例:
create procedure mytest()
begin
set @sql = 'select ? as num ';
set @index = 10;
prepare stmt from @sql;
execute stmt using @index // 傳入會話變數填充sql中的 ?
deallocate prepare stmt;
end;
需要注意的是:
set @sql = concat('select count(*) into @count from', tablename);
表名在sql中是不能用?來代替的,所以只能 用字串拼接。
而想要獲取execute 執行sql後的結果,直接將 "into 變數名 " 拼在預處理sql中就可以了,這裡的變數名必須加@,否則呼叫這個儲存過程時會報錯。
示例:
-- 測試建立儲存過程
drop procedure if exists counttablerows;
create procedure counttablerows(in tablename varchar(50),out num int)
begin
-- set @sql = concat('select * from ', tablename);
-- prepare stmt from @sql;
-- execute stmt;
-- deallocate prepare stmt;
-- set count =@count;
select count(*) into num from tablename;
end;
-- 方案2
drop procedure if exists tableexport;
create procedure tableexport(in tablename varchar(50),out count int)
begin
set @sql = concat('select * from ', tablename);
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
set count =@count;
end;
nvicat呼叫方式:
MYSQL 儲存過程操作
儲存過程 stored procedure 是一組為了完成特定功能的sql語句集 批量插入 是將常用或複雜的工作,預先用sql語句寫好並用乙個指定名稱儲存起來,以後需要資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫 call 儲存過程名字,即可自動完成命令。儲存過程是由流控制和sql語句...
mysql的儲存過程及操作
確定是什麼型別 in,還是別的 定義儲存過程 delimiter create procedure first proc in gra float begin select from sc where grade gra end delimiter call first proc 90 執行結果如圖...
MySQL儲存過程的基本操作
1 作業系統 window10 2 mysql 5.7 1.建立乙個名為select s的儲存過程,該儲存過程的功能是從student表中查詢所有女生的資訊,並執行該儲存過程。1.1 建立select s儲存過程 delimiter create procedure select s begin s...