當前位置:首頁 » 存儲配置 » mysql存儲過程循環

mysql存儲過程循環

發布時間: 2022-08-18 00:36:02

A. mysql存儲過程里怎麼循環一張表

給你一個 參考

--存儲過程名和參數,參數中in表示傳入參數,out標示傳出參數,inout表示傳入傳出參數

create procere p_procerecode(in sumdate varchar(10))
begin
declare v_sql varchar(500); --需要執行的SQL語句
declare sym varchar(6);

declare var1 varchar(20);
declare var2 varchar(70);
declare var3 integer;

--定義游標遍歷時,作為判斷是否遍歷完全部記錄的標記
declare no_more_departments integer DEFAULT 0;

--定義游標名字為C_RESULT
DECLARE C_RESULT CURSOR FOR
SELECT barcode,barname,barnum FROM tmp_table;

--聲明當游標遍歷完全部記錄後將標志變數置成某個值
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_departments=1;

set sym=substring(sumdate,1,6); --截取字元串,並將其賦值給一個遍歷

--連接字元串構成完整SQL語句,動態SQL執行後的結果記錄集,在MySQL中無法獲取,因此需要轉變思路將其放置到一個臨時表中(注意代碼中的寫法)。一般寫法如下:

-- 'Create TEMPORARY Table 表名(Select的查詢語句);
set v_sql= concat('Create TEMPORARY Table tmp_table(select aa as aacode,bb as aaname,count(cc) as ccnum from h',sym,' where substring(dd,1,8)=''',sumdate,''' group by aa,bb)');

set @v_sql=v_sql; --注意很重要,將連成成的字元串賦值給一個變數(可以之前沒有定義,但要以@開頭)
prepare stmt from @v_sql; --預處理需要執行的動態SQL,其中stmt是一個變數
EXECUTE stmt; --執行SQL語句
deallocate prepare stmt; --釋放掉預處理段

OPEN C_RESULT; --打開之前定義的游標
REPEAT --循環語句的關鍵詞
FETCH C_RESULT INTO VAR1, VAR2, VAR3; --取出每條記錄並賦值給相關變數,注意順序

--執行查詢語句,並將獲得的值付給一個變數 @oldaacode(注意如果以@開頭的變數可以不用通過declare語句事先聲明)
select @oldaacode:=vcaaCode from T_sum where vcaaCode=var1 and dtDate=sumdate;
if @oldaacode=var1 then --判斷
update T_sum set iNum=var3 where vcaaCode=var1 and dtDate=sumdate;
else
insert into T_sum(vcaaCode,vcaaName,iNum,dtDate) values(var1,var2,var3,sumdate);
end if;
UNTIL no_more_departments END REPEAT; --循環語句結束
CLOSE C_RESULT; --關閉游標

DROP TEMPORARY TABLE tmp_table; --刪除臨時表
end;

B. mysql存儲過程 游標雙重循環

在老版本的MySQL 3.22中,MySQL的單表限大小為4GB,當時的MySQL的存儲引擎還是ISAM存儲引擎。但是,當出現MyISAM存儲引擎之後,也就是從MySQL 3.23開始,MySQL單表最大限制就已經擴大到了64PB了(官方文檔顯示)。也就是說,從目前的技術環境來看,MySQL資料庫的MyISAM存儲 引擎單表大小限制已經不是有MySQL資料庫本身來決定,而是由所在主機的OS上面的文件系統來決定了。

而MySQL另外一個最流行的存儲引擎之一Innodb存儲數據的策略是分為兩種的,一種是共享表空間存儲方式,還有一種是獨享表空間存儲方式。
當使用共享表空間存儲方式的時候,Innodb的所有數據保存在一個單獨的表空間裡面,而這個表空間可以由很多個文件組成,一個表可以跨多個文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單 表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關數據。
而當使用獨享表空間來存放Innodb的表的時候,每個表的數據以一個單獨的文件來存放,這個時候的單表限制,又變成文件系統的大小限制了。

C. mysql存儲過程需要循環前台傳來的參數然後循環插入表

delimit $
CREATE PROCEDURE simpleproc (seq INT,farmer varchar(50),num INT)
BEGIN
declare i int;
set i=1;
while i<=300 do
insert inot table values(seq,farmer);
set i=i+1;
end while;
END $

D. MySQL 存儲過程 怎麼實現 循環sql語句

delimiter $$
mysql>
mysql> CREATE PROCEDURE myProc() //創建while循環的存儲過程 if分支語句示例
-> BEGIN
->
-> DECLARE i int;
-> SET i=1;
-> loop1: WHILE i<=10 DO
-> IF MOD(i,2)<>0 THEN /*Even number - try again*/
-> SELECT CONCAT(i," is an odd number");
-> END IF;
-> SET i=i+1;
-> END WHILE loop1;
-> END$$
Query OK, 0 rows affected (0.00 sec)

這種也可以

E. MySQL實現創建存儲過程並循環添加記錄的方法

本文實例講述了MySQL實現創建存儲過程並循環添加記錄的方法。分享給大家供大家參考,具體如下:
先創建,然後調用:
--
創建存儲過程
DELIMITER;//
create
procere
myproc()
begin
declare
num
int;
set
num=1;
while
num
<=
24
do
insert
into
t_calendar_hour(hourlist)
values(num);
set
num=num+1;
end
while;
commit;
end;//
--
調用存儲過程
CALL
myproc();
PS:這里再為大家推薦2款常用的sql在線工具供大家參考使用(包含SQL語句用法說明):
SQL在線壓縮/格式化工具:
http://tools.jb51.net/code/sql_format_compress
SQL代碼在線格式化美化工具:
http://tools.jb51.net/code/sqlcodeformat
更多關於MySQL相關內容感興趣的讀者可查看本站專題:《MySQL存儲過程技巧大全》、《MySQL常用函數大匯總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧匯總》及《MySQL資料庫鎖相關技巧匯總》
希望本文所述對大家MySQL資料庫計有所幫助。

F. mysql 使用存儲過程 循環查找數據

delimiter
$$
mysql>
mysql>
CREATE
PROCEDURE
myProc()
//創建while循環的存儲過程
if分支語句示例
->
BEGIN
->
->
DECLARE
i
int;
->
SET
i=1;
->
loop1:
WHILE
i<=10
DO
->
IF
MOD(i,2)<>0
THEN
/*Even
number
-
try
again*/
->
SELECT
CONCAT(i,"
is
an
odd
number");
->
END
IF;
->
SET
i=i+1;
->
END
WHILE
loop1;
->
END$$
Query
OK,
0
rows
affected
(0.00
sec)
這種也可以

G. mysql存儲過程為什麼會多循環一次

沒有多循環一次,只是循環結束後,循環控制變數會是終值的下一個,但是並沒有多執行一次循環體。

H. mysql 存儲過程循環查詢

SELECT COUNT(DISTINCT(app_userId)) FROM

缺少 INTO關鍵字吧?

I. mysql存儲過程中的問題以及觸發器和循環

分為3大循環:(1)if循環
if 條件 then
......
else
......
end if;
(2)while循環
while 條件 do
......
end while;
(3)loop循環
CREATE PROCEDURE myProc()
BEGIN
DECLARE i int;
SET i=0;
loop1: LOOP
SET i=i+1;
IF i>=10 THEN
LEAVE loop1;
ELSEIF MOD(i,2)=0 THEN
ITERATE loop1;
END IF;
SELECT CONCAT(i," is an odd number");
END LOOP loop1;
END;

J. mysql里的存儲過程是怎樣循環的

declare storeId varchar(10);
在存儲過程中創建游標,這個游標裡面存了你所有要循環的數據,集合:
declare diy_cursor cursor for
select store_id from t_b_store;

open diy_cursor;--打開游標
diy_loop:loop ---這里開始循環
FETCH diy_cursor into storeId; --提取本次循環的數據,保存在storeId中
if done = 1 then --done是在存儲過程開始的時候定義的一個整形變數
leave diy_loop;---如果游標中的數據提取完畢,就自動跳出這個循環end if;
----在這里用你循環取到的storeId做你想做的事情,就是寫你的sql啦---
end loop; --循環結束
close diy_loop; --關閉游標

熱點內容
tiobe編程語言社區 發布:2024-12-26 10:48:11 瀏覽:423
日立存儲微碼升級 發布:2024-12-26 10:43:48 瀏覽:152
如何建立家庭網站伺服器 發布:2024-12-26 10:40:46 瀏覽:185
安卓顯示e是什麼意思 發布:2024-12-26 10:35:13 瀏覽:705
電磁爐編程 發布:2024-12-26 10:30:51 瀏覽:97
經典福克斯壓縮比是多少 發布:2024-12-26 10:26:33 瀏覽:747
存取速度最快的存儲器是 發布:2024-12-26 10:17:39 瀏覽:66
我的世界伺服器只能邊跳邊走 發布:2024-12-26 09:55:26 瀏覽:464
銹湖綠色盒子密碼是什麼 發布:2024-12-26 09:53:16 瀏覽:205
mysql資料庫連接類 發布:2024-12-26 09:49:21 瀏覽:83