国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

這篇具有很好參考價值的文章主要介紹了Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. Mysql 創(chuàng)建存儲過程

1.1 前言知識

1.1.1 語法結(jié)構(gòu)

  1. 無參的存儲過程
    delimiter $
    CREATE PROCEDURE 存儲過程名()
    	begin
    		存儲過程體
    	end $;
    
  2. 有參數(shù)的存儲過程
    delimiter $
    CREATE PROCEDURE 存儲過程名(in|out|inout 參數(shù)名1 參數(shù)類型,參數(shù)名2 參數(shù)類型……)
    	begin
    		存儲過程體
    	end $;
    
  3. 刪除存儲過程:
    DROP PROCEDURE IF EXISTS `存儲過程名`;  
    

1.1.2 簡單解釋

  • 部分語法簡單介紹:
    1. delimiter $$
      $$ 是分隔符,用其他符號也行,比如一個$ 或者//
    2. 定義變量:DECLARE
      例子:
      DECLARE `de_test` VARCHAR(20) DEFAULT '';
      
    3. @符號
      • 使用 SET 直接賦值變量,變量名以 @ 開頭:如:set @dogNum = 1002;
      • 其他使用例子如下:
        Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
        Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
    4. prepare語法格式
    • 處理動態(tài)sql,比如表名做變量的sql
      prepare stmt from 'sql語句; --定義
      execute stmt; -- 執(zhí)行
      deallocate prepare stmt;  -- 刪除定義(釋放資源)
      

1.2 創(chuàng)建存儲過程入門例子

1.2.1 無參存儲過程

1.2.1.1 不帶變量
  1. 創(chuàng)建如下:
    DROP PROCEDURE IF EXISTS `sp_select_one_age_dogs`;  
    
    delimiter $
    CREATE PROCEDURE sp_select_one_age_dogs()
    	begin
    		select * from dog d where d.dog_age <=1;
    	end $
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  2. 測試看效果
    • 查看所有的狗狗
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
    • 調(diào)用存儲過程查看年齡不超過1歲的狗狗
      call sp_select_one_age_dogs();
      
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
1.2.1.2 帶變量
  1. 創(chuàng)建如下:
    DROP PROCEDURE IF EXISTS `sp_test`;  
    
    delimiter $
    CREATE PROCEDURE sp_test()
    	begin
    		DECLARE `col_test` VARCHAR(20) DEFAULT '';
    		select 'test' into col_test from dual;
    		select col_test;
    	end $;
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  2. 測試效果
  • 調(diào)用存儲過程:call sp_test();
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

1.2.2 有入?yún)⒌拇鎯^程

  • 創(chuàng)建存儲過程
    DROP PROCEDURE IF EXISTS `sp_select_dog_by_num`;  
    
    delimiter $
    CREATE PROCEDURE sp_select_dog_by_num(in dogNum int(10))
    	begin
    		select d.dog_num ,d.dog_name ,d.dog_kind ,d.dog_age  
    	    from dog d where d.dog_num =dogNum;
    	end $
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  • 調(diào)用存儲過程
    • 調(diào)用方式1:直接給定參數(shù)值1001
      call sp_select_dog_by_num(1001);
      
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
    • 調(diào)用方式2:通過變量調(diào)用
      set @dogNum = 1002;
      call sp_select_dog_by_num(@dogNum);
      
      注意:賦值也可以用:set @dogNum := 1002;
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

1.2.3 有出參的存儲過程

  • 直接在上面無參存儲過程 sp_test() 的基礎(chǔ)上改一個出參的存儲過程,如下:
    1. 創(chuàng)建出參存儲過程:
      DROP PROCEDURE IF EXISTS `sp_test_out`;  
      
      delimiter $
      CREATE PROCEDURE sp_test_out(out col_test varchar(20))
      	begin
      		select 'test' into col_test from dual;
      	end $;
      
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
    2. 測試看效果
      • 調(diào)用存儲過程,注意加:@
        call sp_test_out(@col_test);
        
        Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
      • 查看調(diào)用結(jié)果
        select @col_test;
        
        Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

1.2.4 有入?yún)⒑痛鎯Φ拇鎯^程

  1. 創(chuàng)建存儲過程
    delimiter $
    CREATE PROCEDURE sp_select_dogName_by_num(in dogNum int(10),out dogName varchar(20))
    	begin
    		select d.dog_name into dogName from dog d where d.dog_num =dogNum;
    	end $
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  2. 調(diào)用看效果
    set @dogNum := 1003;
    call sp_select_dogName_by_num(@dogNum,@dogName);
    
    select @dogName;
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

1.2.5 inout的存儲過程

  • 根據(jù)部門id找父節(jié)點(diǎn)(部門id或公司id),如下:
    • 創(chuàng)建存儲過程
      DROP PROCEDURE IF EXISTS `sp_select_pId_by_deptId`;  
      
      delimiter $
      CREATE PROCEDURE sp_select_pId_by_deptId(inout v_code varchar(10))
      	begin
      		SELECT t.PARENT_ID into v_code FROM SYS_COMPANY_DEPT t 
              where t.DEPT_ID =v_code;
      	end $
      	
      delimiter ;
      
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
    • 調(diào)用測試效果
      set @code := 'C001';
      call sp_select_pId_by_deptId(@code);
      select @code;
      
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

1.3 實(shí)用存儲過程例子

1.3.1 根據(jù)表名添加字段的存儲過程

  • 動態(tài)給表添加字段 create_timeupdate_time
  • 創(chuàng)建存儲過程
    drop procedure if exists `add_col_date`;  
    delimiter $$
    create procedure add_col_date(in tableName varchar(50))  
    begin 
    	set @tableName = tableName;
    	set @createTimeSql = concat(' alter table ',@tableName,' add create_time datetime;'); 
    	set @updateTimeSql = concat(' alter table ',@tableName,' add update_time datetime;'); 
    	select  @createTimeSql;
    	prepare stmt from @createTimeSql; 
    	prepare stmt2 from @updateTimeSql;
    	execute stmt;
    	execute stmt2;
    	deallocate prepare stmt; -- 釋放數(shù)據(jù)庫連接
    	deallocate prepare stmt2; 
    end $$
    delimiter ;
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  • 調(diào)用存儲過程,查看效果
    • 測試一張表,首先先看這個表的結(jié)構(gòu):
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
    • 確定沒有那兩個字段,然后調(diào)用存儲過程
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
    • 再次查看表結(jié)構(gòu),字段已添加上
      Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

1.3.2 遞歸查詢的存儲過程

1.3.2.1 遞歸查父id的存儲過程
  1. 先看想實(shí)現(xiàn)的效果
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  2. 創(chuàng)建存儲過程
    drop procedure if exists sp_find_pId_by_deptId;
    
    delimiter $$
    create procedure sp_find_pId_by_deptId(inout deptId varchar(10))
    begin
        declare count_num int(10);  
        SET @@max_sp_recursion_depth = 10;
    	select count(0) into count_num from sys_company_dept t where t.`TYPE` ='1' and t.dept_id =deptId;
        if (count_num = 0) then
            select t.PARENT_ID into deptId from sys_company_dept t where t.dept_id =deptId;
    		call sp_find_pId_by_deptId(deptId); 
        end if;
    end $$
    delimiter ;
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  3. 測試效果
    set @deptId:='D001';
    call sp_find_pid_by_deptId(@deptId);
    select @deptId;
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
1.3.2.2 注意問題
  • 遇到的問題:
    call sp_find_pid_by_deptId(@deptId)
    1456 - Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine sp_find_pid_by_deptId
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  • 問題原因:
    原因是:存儲過程里默認(rèn)不允許遞歸,遞歸深度是0,可以查一下默認(rèn)的遞歸深度:
    select @@max_sp_recursion_depth;
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  • 解決問題:
    在存儲過程里設(shè)置遞歸深度即可:
    SET @@max_sp_recursion_depth = 10;
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子

2. Mysql 創(chuàng)建函數(shù)

2.1 創(chuàng)建語法 與刪除語法

  1. 創(chuàng)建語法
    • 如下:
      delimiter $$
      #在函數(shù)名后面一定要加上returns 函數(shù)返回類型
      create function fun_get_dog_name(dogNum VARCHAR(10)) 
      returns VARCHAR(30) 
      begin
      	declare dogName VARCHAR(30);  #在函數(shù)中定義一個變量,用來接收函數(shù)返回值
      	 函數(shù)邏輯處理
      	return dogName;   # 返回變量                
      end $$
      
  2. 刪除語法:
    drop function if exists 函數(shù)名;
    

2.2 創(chuàng)建函數(shù)例子

2.2.1 入門例子

  • 創(chuàng)建如下:
    drop function if exists fun_get_dog_name;
    
    delimiter $$
    #在函數(shù)名后面一定要加上returns 函數(shù)返回類型
    create function fun_get_dog_name(dogNum VARCHAR(10)) returns VARCHAR(30) 
    begin
    	declare dogName VARCHAR(30);  #在函數(shù)中定義一個變量,用來接收函數(shù)返回值
    	select d.dog_name into dogName from dog d where d.dog_num =dogNum;
    	return dogName;                   
    end $$
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  • 測試看效果
    select fun_get_dog_name('1001');
    
    Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子
  • 好了,簡單的一個小知識,就到這吧

文章來源地址http://www.zghlxwxcb.cn/news/detail-463891.html

到了這里,關(guān)于Mysql 創(chuàng)建存儲過程和函數(shù)及各種例子的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL——存儲過程與存儲函數(shù)

    MySQL從 5.0版本 開始支持 存儲過程 和 存儲函數(shù) 。存儲過程和函數(shù)能夠?qū)?fù)雜的SQL邏輯封裝在一起,應(yīng)用程序無須關(guān)注存儲過程和函數(shù)內(nèi)部復(fù)雜的SQL邏輯,而只需要簡單地調(diào)用存儲過程和函數(shù)即可。 1.1 理解 含義 :存儲過程的英文是 Stored Procedure 。它的思想很簡單,就是一組

    2024年02月10日
    瀏覽(21)
  • MySQL之存儲過程和存儲函數(shù)

    MySQL之存儲過程和存儲函數(shù)

    能夠?qū)⑼瓿商囟üδ艿腟QL指令進(jìn)行封裝(SQL指令集),編譯之后存儲在數(shù)據(jù)庫服務(wù)器上,并且為之取一個名字,客戶端可以通過名字直接調(diào)用這個SQL指令集,獲取執(zhí)行結(jié)果。 2.1 優(yōu)點(diǎn) (1)SQL指令無需經(jīng)客戶端編寫通過網(wǎng)絡(luò)傳送,可以節(jié)省網(wǎng)絡(luò)開銷,同時避免使用SQL指令在網(wǎng)絡(luò)傳

    2024年02月05日
    瀏覽(21)
  • MySQL存儲函數(shù)與存儲過程習(xí)題

    MySQL存儲函數(shù)與存儲過程習(xí)題

    創(chuàng)建表并插入數(shù)據(jù): 1、創(chuàng)建一個可以統(tǒng)計(jì)表格內(nèi)記錄條數(shù)的存儲函數(shù) ,函數(shù)名為count_sch() 先創(chuàng)建一個表并插入一些數(shù)據(jù): mysql d // mysql create function count_sch() - returns int - begin - declare i int default 0; - select count(*) into i from sch; - return i; - end // Query OK, 0 rows affected (0.00 sec) mysql sel

    2024年01月19日
    瀏覽(19)
  • mysql:存儲過程的創(chuàng)建與使用

    mysql:存儲過程的創(chuàng)建與使用

    一、創(chuàng)建存儲過程 使用MySql Workbench創(chuàng)建存儲過程,一定要記得使用 delimiter 指明結(jié)束符,否則會報錯:Statement is incomplete, expecting: \\\';’ 錯誤示例: 正確示例: 其中,//就是結(jié)束符,可以自行指定,比如一般都用$$。 二、存儲過程語法 這里就不照搬官方的語法了,按照我的理

    2024年02月09日
    瀏覽(22)
  • 【MySql】MySql存儲過程與函數(shù)

    存儲過程沒有返回值,函數(shù)有返回值 存儲過程就是一組預(yù)先編譯好的SQL語句的封裝,需要執(zhí)行時客戶端向服務(wù)器發(fā)送調(diào)用請求,服務(wù)器就會將這一系列預(yù)先存儲好的SQL語句全部執(zhí)行。 簡單舉例:存儲過程的創(chuàng)建 DELIMITER意味將$設(shè)置為結(jié)束標(biāo)識,這樣就可以在存儲過程中使用分

    2024年02月09日
    瀏覽(16)
  • MySQL 存儲過程和函數(shù)

    目錄 一、存儲過程和函數(shù)概述 二、創(chuàng)建存儲過程和函數(shù) 1、創(chuàng)建存儲過程 2、創(chuàng)建存儲函數(shù) 三、查看/調(diào)用儲存過程和函數(shù) 1、查看儲存過程/函數(shù) 2、調(diào)用儲存過程/函數(shù) 四、修改/刪除存儲過程和函數(shù) 1、修改存儲過程和函數(shù) 2、刪除存儲過程和函數(shù) 五、練習(xí)? 存儲過程就是一

    2024年02月11日
    瀏覽(25)
  • MySQL:存儲過程與函數(shù)、視圖

    MySQL:存儲過程與函數(shù)、視圖

    一、學(xué)習(xí)目標(biāo) 掌握如何創(chuàng)建存儲過程 掌握如何創(chuàng)建存儲函數(shù) 熟悉變量的使用方法 熟悉如何定義條件和處理程序 了解光標(biāo)的使用方法 掌握流程控制的使用 掌握如何調(diào)用存儲過程和函數(shù) 熟悉如何查看存儲過程和函數(shù) 掌握修改存儲過程和函數(shù)的方法 熟悉如何刪除存儲過程和函

    2024年02月05日
    瀏覽(23)
  • MySQL-15.存儲過程和函數(shù)

    MySQL從5.0版本開始支持存儲過程和函數(shù)。存儲過程和函數(shù)能夠?qū)?fù)雜的SQL邏輯封裝在一起,應(yīng)用程序無須關(guān)注存儲過程和函數(shù)內(nèi)部復(fù)雜的SQL邏輯,而只需要簡單地調(diào)用存儲過程和函數(shù)即可。 1.1 理解 含義 :存儲過程的英文是 Stored Procedure 。它的思想很簡單,就是一組經(jīng)過 預(yù)先

    2024年02月21日
    瀏覽(22)
  • MySQL調(diào)用存儲過程和函數(shù)

    存儲過程和存儲函數(shù)都是存儲在服務(wù)器端的 SQL 語句集合。要想使用這些已經(jīng)定義好的存儲過程和存儲函數(shù)就必須要通過調(diào)用的方式來實(shí)現(xiàn)。 存儲過程通過 CALL 語句來調(diào)用,存儲函數(shù)的使用方法與 MySQL 內(nèi)部函數(shù)的使用方法相同。執(zhí)行存儲過程和存儲函數(shù)需要擁有 EXECUTE 權(quán)限(

    2024年02月06日
    瀏覽(25)
  • MySQL系列(九)存儲過程的創(chuàng)建和使用

    MySQL系列(九)存儲過程的創(chuàng)建和使用

    (1)利用預(yù)處理sql語句輸出teacher表中前n行記錄,執(zhí)行預(yù)處理命令時具體輸出前5行的數(shù)據(jù)。 (2)利用預(yù)處理sql語句,更改course表中課程號為c05109的課程名稱為“數(shù)據(jù)庫系統(tǒng)原理”。 (3)創(chuàng)建存儲過程update_email,修改student表中姓名為‘封月明’的學(xué)生的email為‘feng@qq.com’。

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包