mysql存儲過程詳解
一、變數的定義
mysql中變數定義用declare來定義一局部變數,該變數的使用范圍只能在begin...end
塊中使用,變數必須定義在復合語句的開頭,並且是在其它語句之前,也可以同時申明多個變數,如果需要,可以使用default賦默認值。
定義一個變數語法如下:
declare
var_name[,...]
type[default
value]看一個變數定義實例
declare
last
date;二、mysql存儲過程變數賦值
變數的賦值可直接賦值與查詢賦值來操作,直接賦值可以用set來操作,可以是常量或表達式如果下
復制代碼
代碼如下:
set
var_name=
[,var_name
expr]...給上面的last變數賦值方法如下
set
last
=
date_sub(
current_date(),interval
1
month);下面看通過查詢給變數賦值,要求查詢返回的結果必須為一行,具體操作如下
select
col
into
var_name[,...]
table_expr我們來通過查詢給v_pay賦值。
create
function
get
_cost(p_custid
int,p_eff
datetime)
return
decimal(5,2)
deterministic
reads
sql
data
begin
declare
v_pay
decimail(5,2);
select
ifnull(
sum(pay.amount),0)
into
vpay
from
payment
where
pay.payd<=p_eff
and
pay.custid=pid
reutrn
v_rent
+
v_over
-
v_pay;
end
$$
好了,這篇簡單的存儲過程中變數的定義賦值教程就到這里了,下面我們會接著講關於myql存儲過程的條件的定義與處理。
以下是其它網友的補充
在MySQL的存儲過程中,可以使用變數,它用於保存處理過程中的值。
定義變數使用DECLARE語句,語法格式如下:
DECLARE
var_name[,...]
type
[DEFAULT
value]
其中,var_name為變數名稱,type為MySQL支持的任何數據類型,可選項[DEFAULT
value]為變數指定默認值。一次可以定義多個同類型的變數,各變數名稱之間以逗號「,」隔開。
定義與使用變數時需要注意以下幾點:
◆
DECLARE語句必須用在DEGIN…END語句塊中,並且必須出現在DEGIN…END語句塊的最前面,即出現在其他語句之前。
◆
DECLARE定義的變數的作用范圍僅限於DECLARE語句所在的DEGIN…END塊內及嵌套在該塊內的其他DEGIN…END塊。
◆
存儲過程中的變數名不區分大小寫。
定義後的變數採用SET語句進行賦值,語法格式如下:
SET
var_name
=
expr
[,var_name
=
expr]
...
其中,var_name為變數名,expr為值或者返回值的表達式,可以使任何MySQL支持的返回值的表達式。一次可以為多個變數賦值,多個「變數名=值」對之間以逗號「,」隔開。
例如:
復制代碼
代碼如下:
begin
declare
no
varchar(20);
declare
title
varchar(30);
set
no='101010',title='存儲過程中定義變數與賦值';
end
提示:存儲過程中所有的關鍵字也是不區分大小寫的,如BEGIN可以寫出begin。
❷ 關於mysql存儲過程
create table mytb
(tid int,
subject varchar(100),
content varchar(100))
eg:測試數據:
20 計算機應用 應用軟體開發
21 計算機操作系統 操作系統詳解
22 c# c#開發實戰
=======================================
說明一點:tid編號是連續的,如(1,2,3,4···)
存儲過程如下,測試通過:
create proc my_search
@beg_id int ,
@end_id int
as
declare @names varchar(200),
@bcp varchar(8000)
if(@beg_id<@end_id)
begin
while @beg_id<=@end_id
begin
select @names=subject from mytb where tid=@beg_id
set @bcp = 'bcp "SELECT content FROM 資料庫名.dbo.mytb where tid = ' + rtrim(@beg_id) + '" queryout "E:\11\' + rtrim(@names) + '.txt" -c -U"sa" -P"sa"'
EXEC master..xp_cmdshell @bcp
set @beg_id=@beg_id+1
end
end
==================加路徑後過程==============
--exec my_search 20,21,'E:\11'
ALTER proc my_search
@beg_id int ,
@end_id int ,
@path varchar(200)
as
if(right(@path,1)='\')
begin
set @path=left(@path,len(@path)-1)
end
declare @names varchar(200),
@bcp varchar(8000)
if(@beg_id<@end_id)
begin
while @beg_id<=@end_id
begin
select @names=subject from mytb where tid=@beg_id
set @bcp = 'bcp "SELECT content FROM cdma.dbo.mytb where tid = ' + rtrim(@beg_id) + '" queryout "'+@path+'\' + rtrim(@names) + '.txt" -c -U"sa" -P"sa"'
EXEC master..xp_cmdshell @bcp
set @beg_id=@beg_id+1
end
end
=======
呵呵,很抱歉啊 樓主,沒能實現你的要求,
MSSQL我不熟,我想語法大概也是差不多吧,
❸ MySQL資料庫新特性之存儲過程入門教程
在MYSQL 中 終於引入了存儲過程這一新特性 這將大大增強MYSQL 的資料庫處理能力 在本文中 將指導讀者快速掌握MYSQL 的存儲過程的基本知識 帶領用戶入門
存儲過程介紹
存儲過程是一組為了完成特定功能的SQL語句集 經編譯後存儲在資料庫中 用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它 存儲過程可由應用程序通過一個調用來執行 而且允許用戶聲明變數 同時 存儲過程可以接收和輸出參數 返回執行存儲過程的狀態值 也可以嵌套調用
存儲過程的優點
作為存儲過程 有以下這些優點
( )減少網路通信量 調用一個行數不多的存儲過程與直接調用SQL語句的網路通信量可能不會有很大的差別 可是如果存儲過程包含上百行SQL語句 那麼其性能絕對比一條一條的調用SQL語句要高得多
( )執行速度更快 存儲過程創建的時候 資料庫已經對其進行了一次解析和優化 其次 存儲過程一旦執行 在內存中就會保留一份這個存儲過程 這樣下次再執行同樣的存儲過程時 可以從內存中直接中讀取
( )更強的安全性 存儲過程是通過向用戶授予許可權(而不是基於表) 它們可以提供對特定數據的訪問 提高代碼安全 比如防止 SQL注入
( ) 業務邏輯可以封裝存儲過程中 這樣不僅容易維護 而且執行效率也高
當然存儲過程也有一些缺點 比如
可移植性方面 當從一種資料庫遷移到另外一種資料庫時 不少的存儲過程的編寫要進行部分修改
存儲過程需要花費一定的學習時間去學習 比如學習其語法等
在MYSQL中 推薦使用MYSQL Query Browswer()這個工具去進行存儲過程的開發和管理 下面分步驟來學習MYSQL中的存儲過程
定義存儲過程的結束符
在存儲過程中 通常要輸入很多SQL語句 而SQL語句中每個語句以分號來結束 因此要告訴存儲過程 什麼位置是意味著整個存儲過程結束 所以我們在編寫存儲過程前 先定義分隔符 我們這里定義 // 為分隔符 我們使用DELIMITER //這樣的語法 就可以定義結束符了 當然你可以自己定義其他喜歡的符號
如何創建存儲過程
下面先看下一個簡單的例子 代碼如下
DELIMITER//CREATEPROCEDURE`p ` ()LANGUAGE SQLDETERMINISTICSQL SECURITY DEFINERMENT A procere BEGINSELECT Hello World ! ;END//
下面講解下存儲過程的組成部分
)首先在定義好終結符後 使用CREATE PROCEDURE+存儲過程名的方法創建存儲過程 LANGUAGE選項指定了使用的語言 這里默認是使用SQL
)DETERMINISTIC關鍵詞的作用是 當確定每次的存儲過程的輸入和輸出都是相同的內容時 可以使用該關鍵詞 否則默認為NOT DETERMINISTIC
) SQL SECURITY關鍵詞 是表示調用時檢查用戶的許可權 當值為INVOKER時 表示是用戶調用該存儲過程時檢查 默認為DEFINER 即創建存儲過程時檢查
) MENT部分是存儲過程的注釋說明部分
lishixin/Article/program/MySQL/201404/30557
❹ mysql 存儲過程
.關於MySQL的存儲過程
存儲過程是資料庫存儲的一個重要的功能,但是MySQL在5.0以前並不支持存儲過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0終於開始已經支持存儲過程,這樣即可以大大提高資料庫的處理速度,同時也可以提高資料庫編程的靈活性。
MySQL存儲過程的創建
(1).格式
MySQL存儲過程創建的格式:CREATE PROCEDURE過程名([過程參數[,...]])
[特性...]過程體
這里先舉個例子:
mysql>DELIMITER//
mysql>CREATEPROCEDUREproc1(OUTsint)
->BEGIN
->SELECTCOUNT(*)INTOsFROMuser;
->END
->//
mysql>DELIMITER;
- 註:
(1)這里需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL默認以";"為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做存儲過程中的代碼,不會執行這些代碼,用完了之後要把分隔符還原。
(2)存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用","分割開。
(3)過程體的開始與結束使用BEGIN與END進行標識。