1. 程式人生 > >mysql複合語句、儲存過程、遊標

mysql複合語句、儲存過程、遊標

一、概念:

1、mysql複合語句:必須放在儲存過程或者函式或者其他資料庫物件中

2、儲存過程:一組SQL語句組成,可以帶引數,用於實現特定功能

BEGIN
	#Routine body goes here...
END;
放在BEGIN……END中的語句就是複合語句

二、複合語句的使用

1、宣告變數

1)使用關鍵字declare,寫法:declare 變數名稱 變數型別

  declare i int;#定義一個整型的變數i
  declare name varchar(20);

注意:變數的宣告必須寫在其他複合語句之前

2)宣告變數的同時制定預設值,使用關鍵字declare...default:

 declare address varchar(50) default '成都';

3)定義全域性變數使用@,全域性變數是同一個連線不同查詢都可以使用的變數。

<span style="font-size:12px;">[email protected]=1;//定義全域性變數x,並賦初值</span>
2、給變數賦值,使用關鍵字set
set i=100;
set name='趙文卓';
3、分支語句

1)if-else-then語句。

if i>90 && i<100 then
  set result='優';
else if i>80  then
  set result='良';
else 
  set result='及格';
end if;
end if;#注意使用end if結束
注意:每個if需要使用end if結束條件。

2)case when

select address as '地點',
 case address
   when '重慶' then '火鍋'
   when '成都' then '肥腸粉'
   when '上海' then '甜品'
 end
   as '特產' 
from employee;
4、 迴圈語句

1)while迴圈

declare tem_salary int;
declare i int;
declare sum int;
#查詢salary賦值到tem_salary
select salary into tem_salary from employee where id=101;
while tem_salary<1000000 do
    set tem_salary=tem_salary+5000;
end while;
2)loop迴圈
loop1:loop#loop1是迴圈的標籤
  set tem_salary=tem_salary-2000;#迴圈體
  if tem_salary>500000 then
    iterate loop1;#iterate讓迴圈繼續
  end if;
    leave loop1;#leave讓迴圈結束
end loop;
update employee set salary=tem_salary where id=101;
3)repeat迴圈
set i=1;
set sum=0;
repeat #重複執行以下語句,直到i>10為止
 set i=i+1;
 set sum=sum+i;
until i>10
end repeat;
5、異常處理,SQL使用sqlstate:標準SQL的錯誤程式碼,由5位數字組成。mysql特有的錯誤程式碼,mysql_error_code mysql由4位組成,一般使用sqlstate。
BEGIN
  #如果出現23000異常,則把全域性變數x設定為1,異常處理程式,出了異常就會執行的程式碼
  #出了異常就繼續
  declare continue handler for sqlstate '23000' [email protected]=1;
  #出現異常就退出
  declare exit handler for sqlstate 'HY000' [email protected]=1;
  set @y=1;
  insert into employee values(125,'松子',27,15000,'上海',1001,107);
  set @y=2;
  insert into employee values(125,'松子',27,15000,'上海',1001,107);
  set @y=3;#如果異常處理成功,則會處理該行程式碼
END
更多sqlstate,標準SQL的錯誤程式碼參考mysql官網:http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html

三、遊標的使用

1、概念:遊標,存放結果集。

2、遊標的使用步驟:

1)宣告遊標:declare 遊標名稱 cursor for 查詢結果集;

2)開啟遊標:open 遊標名稱;

3)使用遊標(遊標本身不帶迴圈),使用fetch一次取遊標中一行資料存入臨時變數中:fetch 遊標名稱 into 臨時變數集合;

4)關閉遊標: close 遊標名稱;

參考程式碼:

BEGIN
  declare c_id int;#臨時變數
  declare c_salary int;#臨時變數
  declare done int default false;#done表示是否有資料
   
  #1 宣告遊標 查詢employee中所有記錄修改前的id,salary
  declare c1 cursor for select id,salary from employee;
  #當遊標資料獲取完畢,丟擲異常,把結束標誌設定為true
  declare continue handler for not found
  set done=true;
  #2 開啟遊標
  open c1;
  #3 使用遊標,遊標本身不帶迴圈
  loop1:loop
    if done THEN#如果結束標誌為true則結束迴圈
       leave loop1;
    end if;
    fetch c1 into c_id,c_salary;#fetch一次取遊標中一行資料存入臨時變數中
    #根據當前的c_id 為當前資料的salary加500
    update employee set salary=c_salary+500 where id=c_id;
  end loop loop1;
  # 關閉遊標
  close c1;
END
四、儲存過程,實現特定功能一組SQL語句組成。

1、不帶引數的儲存過程

1)使用SQL建立不帶引數的儲存過程

create procedure getEmp()
BEGIN
  #不帶引數的儲存過程
  select * from employee;
END;
2)呼叫不帶引數的儲存過程
call getEmp();
2、帶引數的儲存過程

1)儲存過程的引數分為三種:

      a)in:傳入引數,不會返回資料。

      b)out:傳出引數,返回資料給呼叫的方法。

      c)inout:傳入,傳出引數。

2)使用SQL建立帶引數的儲存過程,用法參考:
CREATE PROCEDURE calcs(IN c_id int,OUT c_name varchar(20),INOUT c_salary int)
BEGIN
  #將查詢結果放入傳出引數,條件使用的傳入引數
  select name into c_name from employee where id=c_id;
  #將傳入的c_salary加上1000,然後存入傳出引數
  select salary+c_salary into c_salary from employee where id=c_id;
END;
3)呼叫帶引數的儲存過程:
set @c_id=101;#傳入引數,呼叫完後不再使用
set @c_salary=5000;#傳入傳出引數,呼叫完後可以接受值
call calcs(@c_id,@c_name,@c_salary);
3)驗證結果:
select @c_name,@c_salary;

相關推薦

mysql複合語句儲存過程遊標

一、概念: 1、mysql複合語句:必須放在儲存過程或者函式或者其他資料庫物件中 2、儲存過程:一組SQL語句組成,可以帶引數,用於實現特定功能 BEGIN #Routine body goes here... END;放在BEGIN……END中的語句就是複合語句 二、

mysql 初級篇(三) 觸發器儲存過程遊標

mysql 初級篇(三) 觸發器、儲存過程、遊標   觸發器triggerCreat trigger buggoodAfterInsertOn ordFor each rowBeginUpdate goods set num=num-new.much where id=new.gidEnd

初學mysql(十)-資料庫之儲存過程函式與遊標-自定義函式和流程控制(下)

上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。 自定義函式: 根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使

MySQL 第八篇:自定義函式儲存過程遊標

本篇內容由猿道教育的課程內容整理而來。 我把MySQL的內容整理成9篇部落格,學完這9篇部落格雖不能說能成為大神,但是應付一般中小企業的開發已經足夠了,有疑問或建議的歡迎留言討論。 自定義函式 一、函式的概念與定義 1、理解函式 函式可以看作是

Mysql的檢視儲存過程函式索引全解析

檢視是查詢命令結果構成的一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的資料集,併為其命名】,使用者使用時只需使用【名稱】即可獲取結果集合,並可以當作表來查詢使用。 1建立檢視 --格式:CREATE VIEW 檢視名稱 AS  SQL語句 CREATE VIEW v1 AS S

mysql-檢視觸發器事務儲存過程函式

目錄 檢視 觸發器 事務 儲存過程 流程控制 一、檢視 檢視是由查詢結果構成的一張虛擬表,和真實的表一樣,帶有名稱的列和行資料 強調:檢視是永久儲存的,但是檢視儲存的不是資料,只是一條sql語句 檢視的特點: 檢視的列可以來自不同的表,是表的抽象和邏輯意義上建立的新關係。 

mysql資料庫學習11-儲存過程函式觸發器

儲存的程式 ========================================   * 資料庫中儲存的程式,對資料進行運算處理      * 儲存過程   * 函式   * 觸發器    會話變數

MySQL:檢視觸發器儲存過程事務

檢視: 檢視,虛擬表 建立虛擬表: # 語法: # create view 虛擬表名稱 as 虛擬表; create view course_and_teacher as select * from course inner join teacher on course.teacher_id =

【轉】MySQL資料庫 外來鍵檢視儲存過程觸發器的優缺點

https://www.yiibai.com/mysql/introduction-sql-views.html 檢視 使用資料庫檢視的優點 資料庫檢視允許簡化複雜查詢:資料庫檢視由與許多基礎表相關聯的SQL語句定義。 您可以使用資料庫檢視來隱藏終端使用者和外部應用

MySql—檢視函式儲存過程觸發器

MySql高階—檢視、函式、儲存過程、觸發器 目錄一、檢視    1 一、檢視 1、檢視的定義 檢視的定義: 檢視是由查詢結果形成的一張虛擬表,是表通過某種運算得到的一個投影。 同一張表可以建立多個檢視 建立檢視的語法: create view view_name as select 語句 說明:

遊標例外儲存過程儲存函式java呼叫儲存過程觸發器(Oracle之二)

--遊標(游標) 一般用於多行資料 語法:cursor 遊標名稱 (引數名 引數型別 ..) is select語句 --操作遊標 open 遊標名; --開啟遊標 loop   fetch 遊標名

mysql 神器 if 語句儲存過程遊標

BEGIN declare key_list varchar(255) default '';  declare mykey varchar(255) default '';  declare int_flag int default 0;  declare done int

mysql筆記三-----sql儲存過程事務的隔離級別和sql各查詢的區別防黑

儲存過程 ※※儲存過程※※※ 定義: create procedure 過程名(引數) begin 多條sql語句 end 呼叫: call 過程名(實參) 例項1--無參的儲存過程: △小細節:要把預設的語句結束“;”號改成其它如“$$”,

我的Python成長之路--Day48--mysql高階(檢視觸發器事物儲存過程函式流程控制資料備份與恢復)

目錄 1、檢視 2、觸發器 3、事物 自定義函式 1、檢視 1.1、什麼是檢視 檢視是一張表或者多張表的查詢結果構成的一張虛擬表

MySQL觸發器儲存過程自定義函式檢視 常用SQL

1.建立一個userinfo表新增記錄時的觸發器 將新增日誌加入到userinfolog 2.建立一個向userinfo表新增記錄的儲存過程 3.根據userinfo表的出生日期欄位 我們將建立一個簡單算得年齡的自定義函式 4.建立一個userinfo的檢視 呼叫年齡函式

檢視觸發器事務儲存過程函式,流程控制

檢視 檢視是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的資料集,併為其命名】,使用者使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。 使用檢視我們可以把查詢過程中的臨時表摘出來,用檢視去實現,這樣以後再想操作該臨時表的資料時就無需重寫複雜的sql了,直接去檢視中查詢即可,

Oracle刪除當前使用者下的所有表檢視序列函式儲存過程包(轉)

最近在用oracle,發現了一個批量刪除資料庫中的各種結構的好方法。 --delete tables  select 'drop table ' ||&

子查詢儲存過程檢視

子查詢:把內層的查詢結果供外層使用,先執行內層,再執行外層,先做內層,再做外層 例:查詢比Tom小的所有學生的資訊 SELECT * FROM student WHERE birthday> ( SELECT birthday FROM student W

檢視儲存過程函式觸發器事件

儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件,任何一個設計良好的資料庫應用程式都應該用到儲存過程。函式l過程不必返回值l函式必須返回值l過程可

SqlServer中檢視儲存過程事務的使用。

前言 熟悉SqlServer中檢視、儲存過程、事務的使用會在操作資料時帶來更大的方便。 正文 檢視-VIEW VIEW介紹 定義: 檢視(VIEW)虛擬表,一般是不儲存資料的,但是Sqlserver的索引檢視例外(儲存資料)