欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql中的存儲(chǔ)過(guò)程傳參問(wèn)題

 更新時(shí)間:2023年10月12日 08:57:37   作者:IT_CODE.  
這篇文章主要介紹了mysql中的存儲(chǔ)過(guò)程傳參問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.無(wú)參數(shù) call 存儲(chǔ)過(guò)程名()

DELIMITER $
CREATE   PROCEDURE  select_all_data()
BEGIN 
        SELECT  *  FROM  dog;
 END $
 DELIMITER ;
--  2.存儲(chǔ)過(guò)程的調(diào)用       
CALL  select_all_data();
/*
  mysql> CALL  select_all_data();
+------+--------------+------+
| id   | name         | age  |
+------+--------------+------+
|    2 | 旺財(cái)小七     | 19   |
+------+--------------+------+
1 row in set (0.00 sec)

2.in類型

PS:如果僅僅想傳給mysql存儲(chǔ)過(guò)程,那就用in類型

#創(chuàng)建存儲(chǔ)過(guò)程
DELIMITER $$
CREATE PROCEDURE  getUserBySex (IN p_sex VARCHAR(255))
BEGIN
SELECT *  FROM  USER  WHERE sex=p_sex;
SET p_sex = '未知';
SELECT p_sex;
END
$$
DELIMITER;
mysql>  SET  @p_sex="女";   -- 把這個(gè)參數(shù)設(shè)置成女,傳入到存儲(chǔ)過(guò)程
Query OK, 0 rows affected (0.00 sec)
mysql>   CALL getUserBySex(@p_sex);
+----+-----------+------+------+----------+-------+----------------------+
| id | name      | sex  | age  | password | phone | address              |
+----+-----------+------+------+----------+-------+----------------------+
|  8 | 小綠      | 女   |   34 | 222222   | NULL  | 01王賢達(dá)20計(jì)網(wǎng)2      |
| 10 | 小影      | 女   |   30 | 444444   | NULL  | 01王賢達(dá)20計(jì)網(wǎng)2      |
| 11 | 大梅      | 女   |   27 | 555555   | NULL  | 01王賢達(dá)20計(jì)網(wǎng)2      |
| 12 | 陳光明    | 女   |   27 | 555555   | NULL  | 01王賢達(dá)20計(jì)網(wǎng)2      |
+----+-----------+------+------+----------+-------+----------------------+
4 rows in set (0.00 sec)
+--------+
| p_sex  |
+--------+
| 未知   |
+--------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)

ps:這里注意:

可以發(fā)現(xiàn)把這個(gè)參數(shù)設(shè)置成會(huì)話用戶變量女傳進(jìn)去,并且我們?cè)诖鎯?chǔ)過(guò)程中對(duì)這個(gè)變量作了修改,里面是改成了性別:未知,但是出了begin  and  局部變量,這個(gè)變量還是女,因?yàn)檫@參數(shù)設(shè)置是in型,不會(huì)返回到會(huì)話的用戶變量中。 

可以查詢下:

mysql>  SELECT   @p_sex;
+--------+
| @p_sex |
+--------+
| 女     |
+--------+
1 row in set (0.00 sec)

3.out型

如果僅僅從mysql存儲(chǔ)過(guò)程返回值,那就用out類型

#  創(chuàng)建存儲(chǔ)過(guò)程
DELIMITER $$   
  CREATE  PROCEDURE  p_count ( OUT  p_x INT)
  BEGIN
  SELECT  p_x;
  SET  p_x = 2;
  SELECT  p_x;
  END $$
  DELIMITER ; 
#調(diào)用  CALL p_count(2)
錯(cuò)誤代碼: 1414
OUT or INOUT argument 1 for routine 01wangxianda.p_count is not a variable or NEW pseudo-variable in BEFORE trigger
#大概意思得傳參數(shù)(變量)
 
set @x=1;
mysql> set @x=1;
Query OK, 0 rows affected (0.00 sec)
mysql> call p_count(@x);
+------+
| p_x  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
+------+
| p_x  |
+------+
|    2 |
+------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
mysql> select  @x;
+------+
| @x   |
+------+
|    2 |
+------+
1 row in set (0.00 sec)
mysql>
mysql> call  p_count (@s);
+------+
| p_x  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
+------+
| p_x  |
+------+
|    2 |
+------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
mysql>

ps:這個(gè)變量在局部變量里面并沒(méi)有實(shí)際意思,只是一個(gè)變量中轉(zhuǎn)站(大概這樣理解,因?yàn)榈谝粋€(gè)select始終為空,不管你設(shè)置什么變量進(jìn)去,有值變量也是一樣)

實(shí)際應(yīng)用中用的比較多的是in  out 結(jié)合:

例題:用in參數(shù)empname輸入員工姓名,用Out參數(shù)empsalary輸出員工薪資

DELIMITER //
                                            --    這兩都是形參    empanme,empsalary
CREATE  PROCEDURE  show_someone_salary2(IN  empname VARCHAR(20), OUT empsalary  DECIMAL (10,2))
BEGIN 
      SELECT  salary INTO  empsalary
      FROM  employees
      WHERE  last_name = empname;
END //
DELIMITER;

調(diào)用:

mysql> SET @empname = 'Abel';     --  設(shè)置用戶變量并且賦值
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> CALL  show_someone_salary2(@empname,@empsalary);  -- 調(diào)用存儲(chǔ)過(guò)程傳入?yún)?shù)
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> SELECT  @empsalary;    --  查詢輸出變量
+------------+
| @empsalary |
+------------+
|   11000.00 |
+------------+
1 row in set (0.00 sec)
mysql> CALL  show_someone_salary2('Weiss',@隨便什么變量);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> SELECT  @隨便什么變量
    -> ;
+---------------------+
| @隨便什么變量       |
+---------------------+
|             8000.00 |
+---------------------+
1 row in set (0.00 sec)

ps:也可以in類型直接傳入需要字段名,不用再外面設(shè)置會(huì)話用戶變量,存儲(chǔ)過(guò)程自己會(huì)接受這值作為局部變量使用,out類型的調(diào)用時(shí)一定得傳@變量,因?yàn)檫@個(gè)存儲(chǔ)調(diào)用完,out類型變量得輸出

4.inout型

如果需要把數(shù)據(jù)傳給mysql存儲(chǔ)過(guò)程,還要經(jīng)過(guò)一些計(jì)算再回傳我們,此時(shí),要使用inout類型

#創(chuàng)建
DELIMITER  $$
CREATE  PROCEDURE  p_inout(INOUT s_x INT)
BEGIN
SELECT  s_x;
SET s_x=3;
SELECT s_x;
END $$
DELIMITER ;
#調(diào)用存儲(chǔ)過(guò)程
mysql> set  @s_x=99;
Query OK, 0 rows affected (0.00 sec)
mysql> call p_inout (@s_x);
+------+
| s_x  |
+------+
|   99 |
+------+
1 row in set (0.00 sec)
+------+
| s_x  |
+------+
|    3 |
+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

ps:注意第一個(gè)select 是99

測(cè)試:雖然你調(diào)用之前把@s_x用戶會(huì)話變量設(shè)置成了99,但是你傳入存儲(chǔ)過(guò)程之后set賦值了,并且inout型參數(shù)可以輸出,打印出來(lái)影響用戶會(huì)話變量,所以打印出依舊是3

mysql> select  @s_x;
+------+
| @s_x |
+------+
|    3 |
+------+
1 row in set (0.00 sec)
mysql>

inout 實(shí)際運(yùn)用

--  創(chuàng)建存儲(chǔ)過(guò)程,查詢某個(gè)員工領(lǐng)導(dǎo)的姓名,并用inout類型

-- ‘empname’輸入員工姓名查詢出其領(lǐng)導(dǎo)的名字

 
DELIMITER $
CREATE PROCEDURE show_mgr_name(INOUT empname VARCHAR(25))
BEGIN 
    SELECT manager_id,last_name    -- 上級(jí)的id
    FROM  employees
    WHERE employee_id = (    -- 過(guò)濾的條件   上級(jí)的編號(hào) ==    查出來(lái)的編號(hào)
        SELECT manager_id FROM employees
        WHERE last_name = empname        -- (傳入一個(gè)名字)根據(jù)上級(jí)的名字查出上級(jí)的編號(hào)編號(hào)                  
    );
 END $
DELIMITER ; 

調(diào)用

mysql> SET @empname := 'Abel';  -- 傳入名字變量
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql> SELECT @empname;    -- 查詢這個(gè)變量
+----------+
| @empname |
+----------+
| Abel     |
+----------+
1 row in set (0.00 sec)
mysql>
mysql>
mysql> CALL show_mgr_name(@empname);  -- 調(diào)用存儲(chǔ)

--測(cè)試

這里有一個(gè)問(wèn)題,INOUT類型需要接收一個(gè)變量,而不是一個(gè)具體的數(shù)字,這樣才能通過(guò)這個(gè)變量獲取存儲(chǔ)過(guò)程傳遞出來(lái)的值,所以需要提前定義一個(gè)變量,把這個(gè)變量傳到存儲(chǔ)過(guò)程中去。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Mysql使用B+樹(shù)來(lái)實(shí)現(xiàn)索引的原因

    淺談Mysql使用B+樹(shù)來(lái)實(shí)現(xiàn)索引的原因

    這篇文章,主要來(lái)探討一下為什么Mysql使用B+樹(shù)來(lái)實(shí)現(xiàn)索引,這里討論的目標(biāo)是Mysql的InnoDB存儲(chǔ)引擎.可以想象一下,如果你是Mysql的開(kāi)發(fā)人員,你會(huì)怎么去選擇合適的數(shù)據(jù)結(jié)構(gòu)呢,感興趣的小伙伴跟著小編一起來(lái)探討吧
    2023-05-05
  • 哪些情況會(huì)導(dǎo)致?MySQL?索引失效

    哪些情況會(huì)導(dǎo)致?MySQL?索引失效

    這篇文章主要介紹了哪些情況會(huì)導(dǎo)致MySQL索引失效,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • MySQL日期函數(shù)與時(shí)間函數(shù)匯總(MySQL 5.X)

    MySQL日期函數(shù)與時(shí)間函數(shù)匯總(MySQL 5.X)

    這篇文章主要給大家介紹了關(guān)于MySQL 5.X日期函數(shù)與時(shí)間函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 一次神奇的MySQL死鎖排查記錄

    一次神奇的MySQL死鎖排查記錄

    這篇文章主要給大家介紹了一次神奇的MySQL死鎖排查的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Mysql5.7中使用group concat函數(shù)數(shù)據(jù)被截?cái)嗟膯?wèn)題完美解決方法

    Mysql5.7中使用group concat函數(shù)數(shù)據(jù)被截?cái)嗟膯?wèn)題完美解決方法

    前幾天在項(xiàng)目中遇到一個(gè)問(wèn)題,使用 GROUP_CONCAT 函數(shù)select出來(lái)的數(shù)據(jù)被截?cái)嗔?,最長(zhǎng)長(zhǎng)度不超過(guò)1024字節(jié),開(kāi)始還以為是navicat客戶端自身對(duì)字段長(zhǎng)度做了限制的問(wèn)題。后來(lái)查找出原因,解決方法大家跟隨腳本之家小編一起看看吧
    2018-03-03
  • MySQL學(xué)習(xí)筆記之?dāng)?shù)據(jù)的增、刪、改實(shí)現(xiàn)方法

    MySQL學(xué)習(xí)筆記之?dāng)?shù)據(jù)的增、刪、改實(shí)現(xiàn)方法

    這篇文章主要介紹了MySQL學(xué)習(xí)筆記之?dāng)?shù)據(jù)的增、刪、改實(shí)現(xiàn)方法,簡(jiǎn)單介紹了mysql實(shí)現(xiàn)數(shù)據(jù)的增、刪、改相關(guān)語(yǔ)法與使用技巧,需要的朋友可以參考下
    2016-09-09
  • mysql 8.0.16 winx64安裝配置方法圖文教程

    mysql 8.0.16 winx64安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 8.0.16 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2019-05-05
  • MySQL8.0.20壓縮版本安裝教程圖文詳解

    MySQL8.0.20壓縮版本安裝教程圖文詳解

    這篇文章主要介紹了MySQL8.0.20壓縮版本安裝教程,需本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,要的朋友可以參考下
    2020-08-08
  • IDEA的database插件無(wú)法連接mysql的解決辦法(08001錯(cuò)誤)

    IDEA的database插件無(wú)法連接mysql的解決辦法(08001錯(cuò)誤)

    用navicat鏈接數(shù)據(jù)庫(kù)正常,mysql控制臺(tái)操作正常,但是用IDEA的數(shù)據(jù)庫(kù)插件鏈接一直報(bào) 08001 錯(cuò)誤,本文就給大家介紹一下IDEA的database插件無(wú)法連接mysql報(bào)08001錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2024-07-07
  • JDBC連接的六步實(shí)例代碼(與mysql連接)

    JDBC連接的六步實(shí)例代碼(與mysql連接)

    這篇文章主要給大家介紹了關(guān)于JDBC連接的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評(píng)論