當前位置:首頁 » 存儲配置 » mysql存儲過程返回遊標

mysql存儲過程返回遊標

發布時間: 2022-07-29 17:13:34

1. mysql存儲過程中使用游標的實例

復制代碼
代碼如下:
DELIMITER
$$
DROP
PROCEDURE
IF
EXISTS
getUserInfo
$$
CREATE
PROCEDURE
getUserInfo(in
date_day
datetime)
--
--
實例
--
MYSQL存儲過程名為:getUserInfo
--
參數為:date_day日期格式:2008-03-08
--

BEGIN
declare
_userName
varchar(12);
--
用戶名
declare
_chinese
int
;
--
語文
declare
_math
int
;
--
數學
declare
done
int;
--
定義游標
DECLARE
rs_cursor
CURSOR
FOR
SELECT
username,chinese,math
from
userInfo
where
datediff(createDate,
date_day)=0;
DECLARE
CONTINUE
HANDLER
FOR
NOT
FOUND
SET
done=1;
--
獲取昨天的日期
if
date_day
is
null
then

set
date_day
=
date_add(now(),interval
-1
day);
end
if;
open
rs_cursor;
cursor_loop:loop

FETCH
rs_cursor
into
_userName,
_chinese,
_math;
--
取數據

if
done=1
then

leave
cursor_loop;

end
if;
--
更新表
update
infoSum
set
total=_chinese+_math
where
UserName=_userName;
end
loop
cursor_loop;
close
rs_cursor;

END$$
DELIMITER
;

2. MYSQL存儲過程的輸出參數可以是游標嗎

你是用ado連接資料庫的吧,我在VC下也同樣出現這樣的問題,使用游標的時候獲取不到輸出值,且還會導致連接中斷。估計是mysql存儲過程還不夠完善,在oracle使用就沒有任何問題。 你可以用Mysql Api直接連接mysql,應該沒有這樣的問題.

3. mysql 是否支持怎樣的游標參數

1) 如果僅僅想把數據傳給MySQL存儲過程,那就用in類型參數;2) 如果僅僅從MySQL存儲過程返回值,那就用out類型參數;3) 如果需要把數據傳給MySQL存儲過程經過計算再傳回給我們,那就用inout類型參數。

4. mysql 存儲過程 游標什麼億is

存儲過程和函數(存儲在 mysql資料庫中的 proc表,所以檢查有沒有這個表)
存儲過程是一種存儲程序(如正規語言里的子程序一樣),mysql支持有兩種:存儲過程,在其他SQL語句中可以返回值的函數(使用起來和 mysql預裝載的函數一樣,如 pi())
一個存儲過程包括名字,參數列表,以及可以包括很多SQL語句的SQL語句集。
as:(復合語句塊)
CREATE PROCEDURE procere1 /*name存儲過程名*/
(in parameter1 interger) /*parameters參數*/
BEGIN /*start of block 語句塊頭*/
DECLARE varialbe1 CHAR(10); /* variables 變數聲明*/
IF parameter1 = 100 THEN /*start of IF if條件*/
SET variable1 = 'birds'; /*assignment 賦值*/
ELSE
SET variable1 = 'beasts'; /*assignment 賦值*/
END IF; /*end of if if結束*/
INSERT INTO table1 values(variable1); /*statement SQL語句*/
END;

5. MySql資料庫的存儲過程能返回遊標么

不知道mysql這個跟oracle裡面,是不是一致的,下面是我學習的時候總結的

如果一個過程要返回一個結果集,那麼要引用游標來處理這個結果集。
create or replace procere Test
(
varEmpName emp.ename%type
)
As
begin ------會報錯.錯誤原因沒有into子句.
select * from emp where ename like '%'||varEmpName||'%';
end;

這個程序我們無法用into,因為在Oracle裡面沒有一個類型去接受一個結果集.這個時候我們可以聲明游標對象去接受他.

有倆種方法:
一種是聲明系統游標,一種是聲明自定義游標,然後後面操作一樣,參數類型為
in out 或out
(1)聲明個人系統游標.(推薦)
create or replace p_temp_procere
(
cur_arg out sys_refcursor; --方法1
)
begin
open cur_arg for select * from tablename;
end
調用
declare
cur_calling sys_refcursor;
begin
p_temp_procere(cur_calling); --這樣這個游標就有值了
for rec_next in cur_calling loop
....
end loop;
end;

(2)在包頭中申明一個游表類型,然後調用者申明一個這個類型的游標變數,傳給返回遊標的存儲過程 ,存儲過程out這個結果集,這種方法很麻煩.游標類型不能像索引表一樣使用create or replace type方法來創建,所以只能在包中申明,並且需要使用/來執行,後面的存儲過程才認這個游標類型.(不推薦,但是建議要知道並且要會這種方式,畢竟它有它存在的道理)
--定義全局變數
create or replace package pkg_package
as
type type_cursor is ref cursor;
type type_record is record
(
test01 varchar2(32),
test02 varchar2(32),
test03 varchar2(32)
);
end;
/
--創建返回遊標的存儲過程
create or replace procere p_temp_procere
(
cur_out_arg out pkg_package.type_cursor
)
is
begin
open cur_out_arg for select * from test;
end;
/
--調用
declare
cur_out_arg pkg_package.type_cursor;
rec_arg pkg_package.type_record;
begin
p_temp_procere(cur_out_arg);
fetch cur_out_arg into rec_arg;
dbms_output.put_line(rec_arg.test01);
dbms_output.put_line(rec_arg.test02);
dbms_output.put_line(rec_arg.test03);
end;

6. 於mysql不能返回遊標,那麼使用mybatis框架在取

mysql存儲過程是這樣的
create procere sp_get_user_count
(
out v_count int
)
begin
select count(1) into v_count from t_user;
select * from t_dept;
select * from t_class;
end;
由於mysql不能返回遊標,那麼使用mybatis框架在取的時候應該怎麼取呢?怎樣確定取出來的是t_dept的還是t_class?
<!--這段應改怎麼寫啊?-->
<select id="selectAll" >
call sp_get_user_count()
</select>

7. mysql 存儲過程 怎麼跳出遊標 循環

游標一般與循環一起使用,可以設置一個循環結束條件來跳出循環並關閉游標。

8. 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
----將存儲過程返回的列值再重新插入源表中

9. mysql存儲過程中能返回遊標嗎

MySQL中可以返回一個記錄集 , 比如直接 select * from test_table; ,你在程序中直接調這個存儲過程,存儲過程會返回這些記錄集到你的客戶端應用程序中。
但無法返回遊標。

熱點內容
21款昂科威哪個配置好 發布:2024-10-06 02:20:39 瀏覽:835
拆裝空調壓縮機 發布:2024-10-06 01:59:47 瀏覽:419
dl演算法 發布:2024-10-06 01:59:44 瀏覽:845
寵物商店java 發布:2024-10-06 01:59:43 瀏覽:536
androidimageview文字 發布:2024-10-06 01:53:55 瀏覽:819
檢查電腦與伺服器的連通性和路徑 發布:2024-10-06 01:37:38 瀏覽:432
宋春麗訪問 發布:2024-10-06 01:34:23 瀏覽:677
美國往事ftp 發布:2024-10-06 01:29:03 瀏覽:772
dtu編程 發布:2024-10-06 01:23:30 瀏覽:595
照片視頻加密 發布:2024-10-05 23:58:58 瀏覽:481