當前位置:首頁 » 存儲配置 » mysql存儲過程返回結果集

mysql存儲過程返回結果集

發布時間: 2022-07-27 13:11:25

A. 如何 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

IF @isdead_a = 1 THEN
INSERT INTO t_user_voucher (userid, voucherid, isdead)
VALUES
(userid, voucherid, 1);
UPDATE t_voucher SET c_count = c_count-1 where id = voucherid;

SET result = 0;-- 成功
END;

B. 怎樣得到mysql存儲過程多條語句的結果集

存儲過程經常需要返回多個結果集。 Mysql 中直接用 select 即可返回結果集。而 oracle 則需要使用游標來返回結 果 集。這一點 Mysql 相對比較方便,如下代碼即可實現輸出兩個結果集:
CREATE PROCEDURE test_proc_multi_select()
BEGIN
select * from testproc;
select * from testproc where id=1;
END;
java 中利用循環,即可獲取結果集數據:

con = MConnection.getConn();
String sql = "{call test_proc_multi_select()}";
cs = con.prepareCall(sql);
boolean hadResults = cs.execute();
int i = 0;
while (hadResults) {
System.out.println("result No:----" + (++i));
ResultSet rs = cs.getResultSet();
while (rs != null && rs.next()) {
int id1 = rs.getInt(1);
String name1 = rs.getString(2);
System.out.println(id1 + ":" + name1);
}
hadResults = cs.getMoreResults(); // 檢查是否存在更多結果集
}

C. mysql中的存儲過程怎麼返回一個結果集

可以通過游標循環獲取對應的結果,
與resultset的用處是一致的

D. MYSQL如何把存儲過程所返回的結果集插入到表

從存儲過程返回表類型的值也有二種:
1.存儲過程使用浮標參數,即同時指定CURSOR VARYING OUTPUT項.調用者可以使用while及fetch循環遍歷該浮標.
2.直接將存儲過程返回的結果集插入到表中,即使用insert into 表名 exec 存儲過程.此種方式中注意存儲過程返回的結果集列與insert的列要完全對應,可以在insert中指定列名來保證對應關系.
------------------------------------------------------------------------------測試:------------------------------------------------------------------------------
----建立測試用的臨時表
create table #tmp (colx int,coly int)
insert into #tmp values(1,2)
insert into #tmp values(2,3)
insert into #tmp values(3,4)
select * from #tmpGO----創建返回遊標的存儲過程
create proc sp_c @cur CURSOR VARYING OUTPUTASbeginset @cur = CURSOR for select colx from #tmp
open @cur /*該過程返回遊標,該游標為colx列的查詢結果*/endGO----創建返回表的存儲過程
create proc sp_dasselect coly from #tmp /*該過程返回coly列的查詢結果*/go----創建用於調用以上二個存儲過程的存儲過程
create proc sp_easbegindeclare @x int
declare @cur cursor
----接收游標,並遍歷游標
EXEC sp_c @cur OUTPUT
fetch next from @cur into @x
while (@@FETCH_STATUS = 0)beginprint @xfetch next from @cur into @xENDclose @curdeallocate @cur
----將存儲過程返回的列值再重新插入源表中

E. mysql 存儲過程返回數據集

DELIMITER//

CREATEDEFINER=`root`@`%`PROCEDUREtestProc()
BEGIN
SELECT'Hello1'ASA,'World1'ASBUNIONALL
SELECT'Hello2'ASA,'World2'ASB;
END//

DELIMITER;
mysql>calltestProc();
+---------+---------+
|A|B|
+---------+---------+
|Hello1|World1|
|Hello2|World2|
+---------+---------+
2rowsinset(0.00sec)

QueryOK,0rowsaffected(0.01sec)

上面這種效果, 是你要的效果么?

F. mysql 創建存儲過程中用到循環,怎麼通過select返回結果集

測試表與測試數據
CREATETABLETestMulToOne(
nameVARCHAR(10),
allTitlesVARCHAR(200)
);
INSERTINTOTestMulToOneVALUES('張三','程序員,系統管理員,網路管理員');
INSERTINTOTestMulToOneVALUES('李四','項目經理,系統分析員');
DELIMITER//
DROPFUNCTIONGetTextCount//
/**********
--獲取字元串中有幾個部分.
**********/
CREATEFUNCTIONGetTextCount(pSourceTextVARCHAR(255),pDivCharCHAR(1))
RETURNSTINYINT
BEGIN
--預期結果.
DECLAREvResultTINYINT;
--當前逗號的位置.
DECLAREvIndexINT;
--前一個逗號的位置.
DECLAREvPrevIndexINT;
--結果的初始值.
SETvResult=1;
--查詢第一個逗號的位置.
SETvIndex=INSTR(pSourceText,pDivChar);
IFvIndex=0THEN
--參數中沒有逗號,直接返回.
RETURNvResult;
ENDIF;
--初始化情況,前一個逗號不存在.
SETvPrevIndex=0;
--循環處理。
WHILEvIndex>0DO
--結果遞增.
SETvResult=vResult+1;
--前一個逗號的位置=當前逗號的位置
SETvPrevIndex=vIndex;
--查詢下一個逗號的位置.
SETvIndex=LOCATE(pDivChar,pSourceText,vPrevIndex+1);
ENDWHILE;
--返回結果.
RETURNvResult;
END;
//

DROPFUNCTIONGetTextValue//
/**********
--獲取字元串中具體某一個部分的數據.
**********/
CREATEFUNCTIONGetTextValue(pSourceTextVARCHAR(255),pDivCharCHAR(1),pIndexTINYINT)
RETURNSVARCHAR(255)
BEGIN
--預期結果.
DECLAREvResultVARCHAR(255);
IFpIndex=1THEN
SELECTSUBSTRING_INDEX(pSourceText,pDivChar,1)INTOvResult;
ELSE
SELECT
REPLACE(
SUBSTRING_INDEX(pSourceText,pDivChar,pIndex),
CONCAT(SUBSTRING_INDEX(pSourceText,pDivChar,pIndex-1),pDivChar),
'')INTOvResult;
ENDIF;

--返回.
RETURNvResult;
END;
//

DELIMITER;

/*
SELECTGetTextCount('程序員,系統管理員,網路管理員',',')ASCo;
SELECT
GetTextValue('程序員,系統管理員,網路管理員',',',1)ASA,
GetTextValue('程序員,系統管理員,網路管理員',',',2)ASB,
GetTextValue('程序員,系統管理員,網路管理員',',',3)ASC;
*/SELECT
t.name,
GetTextValue(t.allTitles,',',MaxNum.No)ASOneTitle
FROM
TestMulToOnet,
(SELECT1NoUNIONALL
SELECT2NoUNIONALL
SELECT3NoUNIONALL
SELECT4NoUNIONALL
SELECT5No)MaxNum
WHERE
GetTextCount(t.allTitles,',')>=MaxNum.No
ORDERBY
t.name;

+------+------------+
|name|OneTitle|
+------+------------+
|張三|系統管理員|
|張三|網路管理員|
|張三|程序員|
|李四|系統分析員|
|李四|項目經理|
+------+------------+
5rowsinset(0.00sec)

G. MYSQL 存儲過程能返回結果集嗎

可以,存儲過程只是把你的查詢語句形成一個固定的格式,這樣你要查詢的時候就不用每次都執行查詢語句了,sql在執行的時候都會將你的sql語句轉換為位元組碼,然後機器才能運行,存儲過程就節省了這一步,已經形成了位元組碼,所以速度才會快,特別是執行次數比較多的時候,可以節省很多時間

H. 求助大神 mybatis 使用Mysql 的存儲過程 怎麼返回多個結果集

如何通過MyBatis獲取mysql存儲過程返回的不確定個數的多個結果集
如果對select
返回的結果行都需要處理,使用游標。
如果只想取得返回多行中的一行,使用limit。

I. 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

J. mysql存儲過程結果集

通過group by就可以一次性返回結果集了

selectFROM_UNIXTIME(date,'%m.%d'),count(1),sum(money)fromtestswheredate>='startTimes'anddate<='endTimes'groupbyFROM_UNIXTIME(date,'%m.%d')

你拿這個去執行

select FROM_UNIXTIME(date,'%m.%d'),count(1),sum(money) from tests where date>=1469980800 and date<=1470585599 group by FROM_UNIXTIME(date,'%m.%d');

這個返回的結果就是8月1號~8月7號每天的數據量及金額

熱點內容
傳奇腳本刷怪 發布:2024-10-06 11:57:47 瀏覽:261
c語言輸入小寫輸出大寫 發布:2024-10-06 11:49:57 瀏覽:361
金立手機伺服器異常是什麼原因 發布:2024-10-06 11:49:48 瀏覽:699
python多線程假的 發布:2024-10-06 11:37:09 瀏覽:723
自己動手構造編譯 發布:2024-10-06 11:35:11 瀏覽:550
c語言編譯器win10 發布:2024-10-06 11:33:35 瀏覽:971
安卓手機里的自動備份是什麼 發布:2024-10-06 11:30:16 瀏覽:714
想買電腦配置要注意哪些 發布:2024-10-06 11:21:50 瀏覽:541
滴滴雲存儲 發布:2024-10-06 11:17:37 瀏覽:767
精通android游戲開發 發布:2024-10-06 11:16:54 瀏覽:801