本文目錄一覽:
mysql 存儲過程
. 關於MySQL的存儲過程
存儲過程是數據庫存儲的一個重要的功能,但是MySQL在5.0以前並不支持存儲過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0終於開始已經支持存儲過程,這樣即可以大大提高數據庫的處理速度,同時也可以提高數據庫編程的靈活性。
MySQL存儲過程的創建
(1). 格式
MySQL存儲過程創建的格式:CREATE PROCEDURE 過程名 ([過程參數[,…]])
[特性 …] 過程體
這裡先舉個例子:
mysql DELIMITER //
mysql CREATE PROCEDURE proc1(OUT s int)
– BEGIN
– SELECT COUNT(*) INTO s FROM user;
– END
– //
mysql DELIMITER ;
註:
(1)這裡需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL默認以”;”為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將”;”當做存儲過程中的代碼,不會執行這些代碼,用完了之後要把分隔符還原。
(2)存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這裡有一個輸出參數s,類型是int型,如果有多個參數用”,”分割開。
(3)過程體的開始與結束使用BEGIN與END進行標識。
mysql存儲過程實例
你是指『01』 想動態的可以用別的值? 可以在創建存儲過程時 用in ,也就是調用存儲過程是傳入參數
大概像這個樣子create procedure sp_test(in a char(50)),然後將’01’換為a
mysql 存儲過程總結(一)
1、存儲過程定義:
存儲過程是事先經過編譯並存儲在數據庫中的一段 SQL 語句的集合,調用存儲過程可以簡化應用開發 人員的很多工作,減少數據在數據庫和應用服務器之間的傳輸,對於提高數據處理的效率是有好處的。 存儲過程思想上很簡單,就是數據庫 SQL 語言層面的代碼封裝與重用。
2、特點:
封裝,復用 : 可以把某一業務SQL封裝在存儲過程中,需要用到 的時候直接調用即可。
可以接收參數,也可以返回數據 :再存儲過程中,可以傳遞參數,也可以接收返回 值。
減少網絡交互,效率提升 : 如果涉及到多條SQL,每執行一次都是一次網絡傳 輸。 而如果封裝在存儲過程中,我們只需要網絡交互一次可能就可以了。
3、基本語法
(1)創建:
(2)調用:
(3)查看:
(4)刪除
注意: 在命令行中,執行創建存儲過程的SQL時,需要通過關鍵字 delimiter 指定SQL語句的 結束符。
Mysql存儲過程中游標的用法實例
本文實例講述了Mysql存儲過程中游標的用法。分享給大家供大家參考。具體如下:
1.
批量插入商戶路由關聯數據:
DELIMITER
$$
USE
`mmm_mac`$$
DROP
PROCEDURE
IF
EXISTS
`批量插入商戶路由關聯數據`$$
CREATE
DEFINER=`root`@`%`
PROCEDURE
`批量插入商戶路由關聯數據`()
BEGIN
DECLARE
v_partner_no
VARCHAR(32);
DECLARE
v_partner_id
INT(11);
DECLARE
v_sc_pid
INT(11);
DECLARE
v_mac_no
VARCHAR(32);
DECLARE
v_mac_addr
VARCHAR(32);
DECLARE
n_mac_no
BIGINT;
DECLARE
n_mac_addr
BIGINT;
DECLARE
n_mac_addr_str
VARCHAR(32);
DECLARE
done
INT;
#取得商戶數據
DECLARE
cur_partnerlist
CURSOR
FOR
SELECT
comp_id,
partner_no,
sc_pid
FROM
mmm_partner.anl_partner;
SET
n_mac_no
=
100000000;
SET
n_mac_addr
=
1000000000;
OPEN
cur_partnerlist;
REPEAT
FETCH
cur_partnerlist
INTO
v_partner_id,v_partner_no,v_sc_pid;
SET
v_mac_no
=
CONCAT(‘MAC’,v_sc_pid,n_mac_no);
SET
n_mac_addr_str
=
CONCAT(SUBSTR(n_mac_addr,1,2),’:’,SUBSTR(n_mac_addr,3,2),’:’,SUBSTR(n_mac_addr,5,2),’:’,SUBSTR(n_mac_addr,7,2),’:’,SUBSTR(n_mac_addr,9,2));
SET
v_mac_addr
=
CONCAT(‘CC:’,n_mac_addr_str);
SET
n_mac_no
=
n_mac_no
+
1;
SET
n_mac_addr
=
n_mac_addr
+
1;
#向t_machine_sc_config表中插入商戶關聯路由的數據
#insert
into
t_machine_sc_config(mac_no,
partner_no,
partner_id,
sc_pid,
mac_addr,
comp_id,
is_lock)
values(‘MAC2016000000001′,’44060430603381′,1,4403,’C8:87:18:AB:79:66’,1,1);
INSERT
INTO
t_machine_sc_config(mac_no,
partner_no,
partner_id,
sc_pid,
mac_addr,
comp_id,
is_lock)
VALUES(v_mac_no,v_partner_no,v_partner_id,v_sc_pid,v_mac_addr,1,1);
UNTIL
END
REPEAT;
CLOSE
cur_partnerlist;
END$$
DELIMITER
;
2.
更新商戶表:
DELIMITER
$$
USE
`mmm_partner`$$
DROP
PROCEDURE
IF
EXISTS
`更新商戶表`$$
CREATE
DEFINER=`root`@`%`
PROCEDURE
`更新商戶表`()
BEGIN
DECLARE
v_partner_no
VARCHAR(32);
DECLARE
vpartner_no
VARCHAR(32);
DECLARE
v_partner_id
VARCHAR(32);
DECLARE
n
BIGINT;
DECLARE
partnerid_list
CURSOR
FOR
SELECT
comp_id
FROM
100msh_partner.anl_partner
WHERE
TRIM(partner_no)
=
”;
SET
vpartner_no
=
‘2015415parno’;
SET
n
=
10000000;
OPEN
partnerid_list;
REPEAT
FETCH
partnerid_list
INTO
v_partner_id;
SET
v_partner_no
=
CONCAT(vpartner_no,n);
SET
n
=
n
+
1;
UPDATE
mmm_partner.anl_partner
SET
partner_no
=
v_partner_no
WHERE
comp_id
=
v_partner_id;
UNTIL
END
REPEAT;
CLOSE
partnerid_list;
END$$
DELIMITER
;
希望本文所述對大家的mysql數據庫程序設計有所幫助。
幫忙寫一個mysql存儲過程,要求如下
要求如下要求A:輸入表名、建立對應副表,其中副表要有額外的記錄主鍵(ID_ROW_SEQ_NO)自增長,額外字段,更新時間(LG_CHG_TIME),操作標記,記錄狀態,來源系統
要求B:建立表名,建立觸發器帶有增刪改功能將捕獲變化數據寫入對應副表,主表添加一條記錄,副表中增加一條記錄,標記「I」,主表刪除一條記錄,副表中增加一條記錄,標記「D」,主表更新一條記錄,副表中增加一條記錄,標記「U」
C要求:操作A表觸發B表
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/295631.html