當前位置:首頁 » 存儲配置 » mysql存儲過程傳參

mysql存儲過程傳參

發布時間: 2023-05-18 18:02:06

❶ mysql 存儲過程總結(一)

1、存儲過程定義:

存儲過程是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,調用存儲過程可以簡化應用開發 人員的很多工作,減少數據在資料庫和應用伺服器之間的傳輸,對於提高數據處理的效率是有好處的。 存儲過程思想上很簡單,就是資料庫 SQL 語言層面的代碼封裝與重用。

2、特點:

封裝,復用 : 可以把某一業務SQL封裝在存儲過程中,需要用到 的時候直接調用即可。

可以接收參數,也可以返回數據 :再存儲過程中,可以傳遞參數,也可以接收返回 值。

減少網路交互,效率提升 : 如果涉及到多條SQL,每執行一次都是一次網路傳 輸。 而如果封裝在存儲過程中,我們只需要網路交互一次可能就可以了。

3、基本語法

(1)創建:

(2)調用:

(3)查看:

(4)刪除

注意: 在命令行中,執行創建存儲過程的SQL時,需要通過關鍵字 delimiter 指定SQL語句的 結束符。

❷ mysql 存儲過程總結(二)if語句、參數

1、if :用於做條件判斷,具體的語法結構為:

在if條件判斷的結構中,ELSE IF 結構可以有多個,也可以沒有。 ELSE結構可以有,也可以沒有。

案列:

根據定義的分數score變數,判定當前分數對應的分數等級。

score >= 90分,等級為優秀。

score >= 80分,等級為良好

score >= 60分,等級為及格

score < 60分,等級為不及格。

上述的需求我們雖然已經實現了,但是也存在一些問題,比如:score 分數我們是在存儲過程中定義 死的,而且最終計算出來的分數等級,我們也僅僅是最終查詢展示出來而已。

那麼我們能不能,把score分數動態的傳遞進來,計算出來的分數等級是否可以作為返回值返回呢? 答案是肯定的,我們可以通過接下來所講解的 參數 來解決上述的問題。

2、參數的類型

主要分為以下三種:IN、OUT、INOUT。 具體的含義如下:

(1)in :該類參數作為輸入,也就是需要調用時傳入值 默認

(2)out:該類參數作為輸出,也就是該參數可以作為返回值

(3)inout:既可以作為輸入參數,也可以作為輸出參數

用法:

案例一:

案列二:

❸ mysql存儲過程傳入一個參數返回結果集

mysql中要獲得存儲過程的返回值,可以增加一個out參數,用來返回。
mysql中存儲過程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUT result INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;

SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN

SET result = 1;-- 已存在

SELECT
result;

ELSE

IF @c_count_a > 0 THEN

IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) > 0 THEN

❹ mysql的存儲過程怎麼傳入數組參數

沒試過往裡面傳數組,一般都是多傳幾個參數,把幾個參數放入SqlParameter[]中,然後cmd.Parameters.AddRange(pars);
創建方法:
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@PageIndex","ccc"),
new SqlParameter("@PageSize","ccc"),
new SqlParameter("@StrSql","ccc")
};
ccc就是你想傳入的值,帶@的就是你在存儲過程中定義的參數。
算是一種另類的數組吧。要不你就把所有條件組合成一個字元串,中間用特殊符號隔開,到資料庫用split方法再分回來,不過這個方法比較麻煩,不推薦

❺ Mysql 存儲過程,傳遞中文參數問題

應該是編碼問題。輸入
set names gbk;
這是使你輸入查詢取數據的傳輸的用的編碼。
不行的話可能你原先存的時候編碼就不對了。
所以就先drop你當前這資料庫,然後set names gbk; ,再建資料庫和表。再測試下應該就可以。

當然還要保證你的server client 底層存數據的默認編碼是utf8..至少要gbk,如果默認是latin1要改下。具體在配置文件my.ini里改 default-character-set=utf8 這個你可以搜索一下具體怎麼改

❻ mysql存儲過程傳多個參數,但並不是所有參數全輸入,這要怎麼寫,

mysql> DELIMITER //
mysql> CREATE PROCEDURE HelloWorld2(
-> IN vUserName VARCHAR(10),
-> OUT vOutValue VARCHAR(10),
-> INOUT vInOutValue VARCHAR(10))
-> BEGIN
-> SELECT CONCAT('Hello ', vUserName);
-> SET vOutValue = 'A';
-> SET vInOutValue = 'B';
-> END//
Query OK, 0 rows affected (0.00 sec)

mysql> call HelloWorld2('Edward', @a, @b)//
+-----------------------------+
| CONCAT('Hello ', vUserName) |

❼ mysql 存儲過程 資料庫表名欄位作為參數傳遞給存儲過程的方法

直接將資料庫表名欄位作為字元類型傳到存儲過程中,存儲過程拼接sql語句,再用exec執行。例如:
CREATE PROCEDURE [proc_test]
(@tablename varchar(100))
WITH
EXECUTE AS CALLER
AS
declare @sql varchar(1000);
set @sql='select * from '+@tablename
exec(@sql)
GO

再直接執行 exec proc_test '學生表'

❽ Mysql 存儲過程 UPDATE語句 欄位=傳遞過來的參數字元串參數

mysql存儲過程支持用表作為參數。
這個問題在MySQL 5.0以前非常麻煩,但是在MySQL 5.0.13版之後,由於引入了PREPARE語句,一切變得簡單了。
例子如下(已驗證):
DROP PROCEDURE IF EXISTS `newtable`;
CREATE PROCEDURE `newtable`(IN tname varchar(64))
BEGIN
SET @sqlcmd = CONCAT('CREATE TABLE ', tname, ' (id int NOT NULL AUTO_INCREMENT, name varchar(64) DEFAULT NULL, PRIMARY KEY (`id`))');
PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
call newtable('abc');

熱點內容
實現秘聞存儲的方法 發布:2025-02-08 10:23:33 瀏覽:168
怎麼在微信發文件夾 發布:2025-02-08 10:09:45 瀏覽:795
cryengine源碼 發布:2025-02-08 09:50:58 瀏覽:394
aardio可以反編譯嗎 發布:2025-02-08 09:50:53 瀏覽:484
公司營業執照密碼是什麼 發布:2025-02-08 09:47:56 瀏覽:855
體驗腳本 發布:2025-02-08 09:46:15 瀏覽:691
醫學生需要什麼配置的筆記本 發布:2025-02-08 09:45:34 瀏覽:772
騷擾電話資料庫 發布:2025-02-08 09:45:34 瀏覽:180
u盤文件加密器 發布:2025-02-08 09:40:35 瀏覽:770
plc數據存儲app 發布:2025-02-08 09:37:17 瀏覽:709