mysql存儲過程中declare 和set 定義變量的區別:
->使用set 或者select 直接賦值,變量名以@開頭
例如: set @var=1;
可以在會話的任何地方聲明,作用域是整個會話,稱為會話變量,也是全局變量。
->以declare關鍵字聲明的變量,只能在存儲過程中使用,稱為存儲過程變量。 這種變量需要設置變量類型,而且只存在 begin....end 這段內
例如:
declare var1 int default 0 ;
主要用在存儲過程中,或者是給存儲傳參數中。
兩者區別:
在調用存儲過程時,declare聲明的變量都會別初始化為null,而會話變量(以@開頭的變量)則不會再被初始化,在一個會話內只被初始化一次,之后是對上一次會話的計算結果,相當於這個會話的全局變量。
在存儲過程中,使用動態語句,預處理時,動態內容必須賦給一個會話變量。
例:
set @v_sql= sqltext;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select ....into .....直接將表內內容賦值到指定變量中
select name,bid into @a,@b from bank limit 1; 注意:變量名和字段名不能一致
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
存儲過程:
存儲過程將一段通用的操作封裝在一起,這樣在不同平台都可以通用了。
存儲過程沒有返回值,而且沒有sql語句調用,只能是call 調用,而且不返回結果集,執行就執行了。
顯示所有存儲過程:
show procedure status;
刪除指定存儲過程:
drop procedure 存儲過程名 ;