初學mysql(十)-資料庫之儲存過程、函式與遊標-自定義函式和流程控制(下)
上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。
自定義函式:
根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使用。儲存過程和函式可以使用流程控制來控制語句的執行。MYSQL中可以使用IF語句、case語句、loop語句、leave語句、iterate語句、while語句來實現流程的控制。和Java、c、c++的使用有些類似,不過還是有些區別的。
表t_user,表t_user1,欄位1 id, 欄位2 userName, 欄位3 job, 欄位4 jobtypeid
create table t_user(
id int primary key auto_increment,
userName varchar(20) ,
job varchar(20),
jobTypeId int,
constraint `fk` foreign key(jobTypeId) references t_jobs(id)
);
create table t_user1( id int primary key auto_increment, userName varchar(20) , job varchar(20), jobTypeId int );
表t_jobs,欄位1 id, 欄位2 jobtypeName, 欄位3 jobNum
create table t_jobs(
id int primary key auto_increment,
jobTypeName varchar(20),
jobNum int
);
1):IF語句的使用。
IF語句格式: if search_condition(判斷條件) then statement_list(執行語句,可以為一條或者多條) [elseif search_condition then statement_list]... [else statements_list] end if
例子:輸入id判斷是否有這個id記錄如果有修改其工作職位和工作型別id,沒有的話插入其記錄。
delimiter &&
create procedure pro_user(in uid int)
begin
select count(*) into @nums from t_user where id = uid;
if @nums > 0 then update t_user set job='飛行員',jobtypeid=6 where id = uid;
elseif @nums = 0 then insert into t_user values(null, '楊利偉', '飛行員', 6);
else insert into t_user values(null, '楊利偉', '飛行員', 6);
end if;
end
&&
呼叫儲存過程:
call pro_user(1);
2):case語句的使用。
case語句格式1:case case_value(條件判斷表示式)
when when_value(可能取的值) then statement_list(執行語句)
[when when_value(可能取的值) then statement_list(執行語句)]...
[else statement_list(執行語句)]
end case
case語句格式2:case
when search_condition(條件判斷語句) then statement_list(執行語句)
[when search_condition(條件判斷語句) then statement_list(執行語句)]...
[else statement_list(執行語句)]
end case
例子:輸入指定Id檢視是否有這個人,有的話修改其userName,job,jobTypeID否則插入此記錄。
形式1:
delimiter &&
create procedure pro_user1(in uid int)
begin
select count(*) into @nums from t_user where id = uid;
case @nums
when 1 then update t_user set job='平民', jobTypeId=0 where id = uid;
when 0 then insert into t_user values(null, '希拉里', '平民', 0) ;
else insert into t_user values(null, '希拉里', '平民', 0);
end case;
end
&&
形式2:
delimiter &&
create procedure pro_user1(in uid int)
begin
select count(*) into @nums from t_user where id = uid;
case
when @nums = 0 then insert into t_user values(null, '希拉里', '平民', 0);
when @nums = 1 then update t_user set job='平民', jobTypeId=0 where id = uid;
else insert into t_user values(null, '希拉里', '平民', 0);
end case;
end
&&
呼叫:call pro_user1(2);
3):loop、leave語句;loop可以使某些特定的語句重複執行 ,實現一個簡單的迴圈,但是loop本身沒有停止迴圈的語句,必須是遇到leave語句才能停止迴圈。
loop語法格式:
[begin label:]loop
statement_list
end loop[end_label]
leave語法格式:
leave label
例子:把t_user表中的n條資料全部匯入t_user1表中做備份。
delimiter &&
create procedure pro_user2(in n int)
begin
declare a,b varchar(20);
declare c int;
abc:loop
if n =0 then leave abc;
else
select userName, job, jobTypeId into a,b,c from t_user where id = n;
insert into t_user1 values(null, a, b, c);
set n = n - 1;
end if;
end loop abc;
end
&&
呼叫:call pro_user2(10);
4):iterate語句。iterate用來跳出迴圈,但是它只是跳出本次迴圈執行下一次迴圈類似與java的continue語句。
iterate語法:iterate label;
例子:例子把t_user表中的資料備份到t_user1表中,是id為4的倍數的不備份。
delimiter &&
create procedure pro_user3(in n int)
begin
declare a,b varchar(20);
declare c int;
abc:loop
set n = n - 1;
if n = 0 then leave abc;
elseif (n%3)=0 then iterate abc;
else
select userName, job,jobTypeId into a,b,c from t_user where id = n;
insert into t_user1 values(null, a,b,c);
end if;
end loop abc;
end
&&
呼叫:call pro_user3(10);
5):repeat語句。repeat語句有條件的迴圈控制語句。當滿足特定條件時,就會跳出迴圈語句。
repeat語法:[begin_label: ]repeat
statement_list
until search_condition
end repeat[end_label]
例子:插入10條重複的記錄到t_user1表中(這個例子比較簡單,讀者可以仿照上面寫把t_user表中的n條記錄備份到t_user1表中)。
delimiter &&
create procedure pro_user4(in n int)
begin
repeat set n = n - 1;
insert into t_user1 values(null, '希拉里', '平民', 0);
until n = 0
end repeat;
end
&&
備份記錄:
呼叫:call pro_user4(10);
6)while語句。
while語法:[begin_label:] while search_condition do
statement_list
end while[end_label]
例子:插入10條重複的記錄到t_user1表中(這個例子比較簡單,讀者可以仿照上面寫把t_user表中的n條記錄備份到t_user1表中)
delimiter &&
create procedure pro_user5(in n int)
begin
while n > 0 do
insert into t_user1 values(null, ‘川普’,'總統', 1);
set n = n - 1;
end while;
end
&&
呼叫:
call pro_user5(10);
A:呼叫儲存過程和函式:
呼叫儲存過程:語法:call 儲存過程名字sp_name(引數1,引數2....); 如:call pro_user(10)
呼叫函式:語法:fun_name(引數1,引數2,.....); 如:call func_user(10);
B:檢視儲存過程或函式的3種方式
1檢視狀態:
show {procedure|function} status [like '儲存過程或函式的名字']
如:
show procedure status like 'pro_user';
2檢視儲存過程或函式的定義:
show create {procedure|function} 儲存過程或函式的名字
如:
show create procedure pro_user;
3從information——schema.routines表中檢視儲存過程或函式的資訊。
C:修改儲存過程或函式;一般不建議這樣做,因為這樣容易產生不可發現的不正確資訊,一般建議刪除重新編寫。
語法:
alter {procedure|function} 名字[characteristic...]
characteristic:{contains sql} no sql | read sql data | modifies sql data}
| sql security {definer | invoker}
| comment 'string'
D:刪除儲存過程或函式:
語法:
drop {procedure | function} 名字;
例子:
drop procedure pro_user ; drop function func_user;
上面思考題答案:用repeat和while把t_user表中指定的記錄條數的資料備份到t_user1表中。
delimiter &&
create procedure pro_user(in counts int)
begin
declare a,b varchar(20);
declare c int;
repeat set counts = counts-1;
select userName,job,jobTypeId into a,b,c from t_user where id = counts;
insert into t_user1 values(null, a,b, c);
until n = 0
end repeat;
end
&&
相關推薦
初學mysql(十)-資料庫之儲存過程、函式與遊標-自定義函式和流程控制(下)
上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。 自定義函式: 根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使
MySQL資料庫之儲存過程
儲存過程(Stored Procedure):一組可程式設計的函式,是為了完成特定功能的SQL語句集,經編譯建立並儲存在資料庫中,使用者可通過指定儲存過程的名字並給定引數(需要時)來呼叫執行。 為什麼
MySQL資料庫之儲存過程與儲存函式
1 引言 儲存過程和儲存函式類似於面向物件程式設計語言中的方法,可以簡化程式碼,提高程式碼的重用性。本文主要介紹如何建立儲存過程和儲存函式,以及儲存過程與函式的使用、修改、刪除等操作。 2 儲存過程與儲存函式 MySQL中提供儲存過程與儲存
MySQL基礎系列之 儲存過程和函式
摘要:儲存過程和函式是事先經過編譯並存儲在資料庫中的一段SQL語句的集合 儲存過程無返回值,函式有返回值 儲存過程的引數可以使用IN、OUT、INOUT,函式只能使用IN 建立儲存過程 CREATE PROCEDURE 建立函式使用 CREATE FUNCTION 使用CALL語句來呼叫
sqlserver查詢資料庫所有儲存過程、觸發器、索引資訊
1. 查詢所有儲存過程 select Pr_Name as [儲存過程], [引數]=stuff((select ','+[Parameter] from ( select Pr.Name as Pr
oracle查詢資料庫中儲存過程、索引、檢視等的數量
select count(1) from user_objects where object_type = 'PROCEDURE' select count(1) from user_objects where object_type = 'INDEX' select co
mysql筆記三-----sql儲存過程、事務的隔離級別和sql各查詢的區別、防黑
儲存過程 ※※儲存過程※※※ 定義: create procedure 過程名(引數) begin 多條sql語句 end 呼叫: call 過程名(實參) 例項1--無參的儲存過程: △小細節:要把預設的語句結束“;”號改成其它如“$$”,
資料庫之儲存過程Procedure
資料庫之儲存過程 一、概述 SQLserver中檢視通過簡單的select查詢來解決複雜的查詢,但是檢視不能提供業務邏輯功能,而儲存過程可以辦到。 二、什麼是儲存過程 儲存過程procedure是一組為了完成特定功能的SQL語句的集合,經編譯後儲存儲存在資料庫中,使用者通過制定儲存過程的名稱big給出引
SQL儲存過程分頁與遊標使用
儲存過程: CREATE procedure p_splitpage @sql nvarchar(4000), --要執行的sql語句 @page int=1, --要顯示的頁碼 @pageSize int,&n
Linux下MySQL 5.5、5.6和5.7的RPM、二進位制和原始碼安裝(下)
[[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_rootlhr-Vol00 9.9
儲存過程與使用者自定義函式(SQL SERVER)
聯絡 二者本質上沒有什麼區別。當儲存過程和函式被執行的時候,SQL Manager會到procedure cache中去取相應的查詢語句,如果在procedure cache裡沒有相應的查詢語句,SQL Manager就會對儲存過程和函式進行編譯。Pr
《Java虛擬機原理圖解》 1.2.3、Class文件裏的常量池具體解釋(下)
and 支持 術語 一個 handle per ret mod make NO9.類中引用到的field字段在常量池中是如何描寫敘述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info) 一般而言。我們在定義
zabbix之自定義使用者數監控模組配置(五)
注:zabbix自定義語法 UserParameter=<key>,<shell command> 一、修改agentd端配置檔案 法一:單獨引出配置檔案 [[email protected] ~]# cd /etc/zabbix/zabbix
linux學習筆記之流程控制(一)if分支語句
流程控制 if語句 單分支if語句 程式 fi``` ```if [ 判斷 ] then 程式 fi``` 例項程式碼指令碼: #!/bin/bash
linux學習筆記之shell程式設計(三)流程控制(3)---for迴圈
for迴圈 語法格式1:指定迴圈範圍 for 變數 in value1 value2... do something done 指令碼例項1 #!/bin/bash for i in 1 2
linux學習筆記之shell程式設計(三)流程控制(4)while迴圈和until迴圈
while迴圈和until迴圈 ###、 while迴圈 不定迴圈,程式碼格式: while [判斷] do something done 指令碼例項1: #!/bin/bash #從1加到
Oracle:PL/SQL--流程控制(三)——迴圈結構:loop、while-loop、for-loop
—–流程控制(三) —–迴圈結構 —–1、loop迴圈 語法: loop statements; end loop; —–實現計數器功能,當計數器為10或者大於10時退出 declare v_count integer :=
【jmeter二次開發】二、Jmeter擴充套件--實現自定義函式ApacheJMeter_functions
Jmater函式擴充套件的步驟1、 匯入Jmeter原始碼,或使用maven專案,引入依賴的jar包2、 繼承AbstractFunction,實現自定義Function3、 繼承JMeterTestCase,對自定義的函式進行單元測試4、 對自定義函式進行編譯打包,並放在l
【MYSQL筆記3】MYSQL過程式資料庫物件之儲存過程的呼叫、刪除和修改
mysql從5.0版本開始支援儲存過程、儲存函式、觸發器和事件功能的實現。 我們以一本書中的例題為例:建立xscj資料庫的儲存過程,判斷兩個輸入的引數哪個更大。並呼叫該儲存過程。 (1)呼叫 首先,建立儲存過程(procedure),名為xscj.compar delimiter $$ crea
mysql資料庫學習11-儲存過程、函式、觸發器
儲存的程式 ======================================== * 資料庫中儲存的程式,對資料進行運算處理 * 儲存過程 * 函式 * 觸發器 會話變數