mysql 儲存過程的操作一

2021-09-28 21:56:03 字數 2237 閱讀 7539

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...