存储过程while循环
触发器也可,其实存储过程或触发器都是SQL语句,只要是SQL语句就可以使用MYSQL
㈡ 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)
这种也可以
㈢ mysql存储过程中iterate对while起不起效果
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了。
这几个循环语句的格式如下:
WHILE……DO……END WHILE
REPEAT……UNTIL END REPEAT
LOOP……END LOOP
GOTO。
下面首先使用第一种循环编写一个例子。
mysql> create procere pro10()
-> begin
-> declare i int;
-> set i=0;
-> while i<5 do
-> insert into t1(filed) values(i);
-> set i=i+1;
-> end while;
-> end;//
Query OK, 0 rows affected (0.00 sec)
在这个例子中,INSERT和SET语句在WHILE和END WHILE之间,当变量i大于等于5的时候就退出循环。使用set i=0;语句是为了防止一个常见的错误,如果没有初始化,i默认变量值为NULL,而NULL和任何值操作的结果都是NULL。
执行一下这个存储过程并产看一下执行结果:
mysql> delete from t1//
Query OK, 0 rows affected (0.00 sec)
mysql> call pro10()//
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1//
+——-+
| filed |
+——-+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
+——-+
5 rows in set (0.00 sec)
以上就是执行结果,有5行数据插入到数据库中,证明存储过程编写正确无误^_^。
再来看一下第二个循环控制指令 REPEAT……END REPEAT。使用REPEAT循环控制语句编写下面这个存储过程:
mysql> create procere pro11()
-> begin
-> declare i int default 0;
-> repeat
-> insert into t1(filed) values(i);
-> set i=i+1;
-> until i>=5
-> end repeat;
-> end;//
Query OK, 0 rows affected (0.00 sec)
这个REPEAT循环的功能和前面WHILE循环一样,区别在于它的执行后检查是否满足循环条件(until i>=5),而WHILE则是执行前检查(while i<5 do)。
不过要注意until i>=5后面不要加分号,如果加分号,就是提示语法错误。
编写完成后,调用一下这个存储过程,并查看结果:
mysql> delete from t1//
Query OK, 5 rows affected (0.00 sec)
mysql> call pro11()//
Query OK, 1 row affected (0.00 sec) #虽然在这里显示只有一行数据受到影响,但是下面选择数据的话,还是插入了5行数据。
mysql> select * from t1//
+——-+
| filed |
+——-+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
+——-+
5 rows in set (0.00 sec)
一行就是执行结果,实际的作用和使用while编写的存储过程一样,都是插入5行数据。
再来看一下第三个循环控制语句LOOP……END LOOP。编写一个存储过程程序如下:
mysql> create procere pro12()
-> begin
-> declare i int default 0;
-> loop_label: loop
-> insert into t1(filed) values(i);
-> set i=i+1;
-> if i>=5 then
-> leave loop_label;
-> end if;
-> end loop;
-> end;//
Query OK, 0 rows affected (0.00 sec)
从上面这个例子可以看出,使用LOOP编写同样的循环控制语句要比使用while和repeat编写的要复杂一些:在循环内部加入了IF……END IF语句,在IF语句中又加入了LEAVE语句,LEAVE语句的意思是离开循环,LEAVE的格式是:LEAVE 循环标号。
编写完存储过程程序后,来执行并查看一下运行结果:
mysql> delete from t1//
Query OK, 5 rows affected (0.00 sec)
㈣ oracle存储过程怎么写循环
写循环的操作方法和步骤如下:
1、第一步,编写存储过程的整体结构,然后定义变量,见下图。
㈤ SQL Server存储过程里 select语句里能加入while循环查询吗或者说怎么循环查询
第一种方和友仿法,创建临时表
create table #temptable()
WHILE @StartID < @EndID
BEGIN
insert into #temptable SELECT。。。
END
第二种方法,使用拼装一唤纤个SQL
declare @sql nvarchar(2000)
WHILE @StartID < @EndID
BEGIN
组装一个合适告悉的SQL,使用union all拼起来
set @sql=@sql+''
END
exec(@sql)
㈥ oracle存储过程循环怎么写
Oracle中有三种循环(For、While、Loop):
1、loop循环:
createorreplaceprocerepro_test_loopis
inumber;
begin
i:=0;
loop
i:=i+1;
dbms_output.put_line(i);
ifi>5then
exit;
endif;
endloop;
endpro_test_loop;
2、while循环:
createorreplaceprocerepro_test_loopis
inumber;
begin
i:=0;
whilei<5loop
i:=i+1;
dbms_output.put_line(i);
endloop;
endpro_test_loop;
3、for循环1:
createorreplaceprocerepro_test_foris
inumber;
begin
i:=0;
foriin1..5loop
dbms_output.put_line(i);
endloop;
endpro_test_for;
4、for循环2:
createorreplaceprocerepro_test_cursoris
userRowt_user%rowtype;
cursoruserRowsis
select*fromt_user;
begin
foruserRowinuserRowsloop
dbms_output.put_line(userRow.Id||','||userRow.Name||','||userRows%rowcount);
endloop;
endpro_test_cursor;
㈦ 存储过程一直循环怎么解决
该怎么吐槽呢,你要实现这功能用不着循环,循环写的也不对,不管怎么循环sal_custormer里的trackeman也不会减少,当然永远exists,你要写的这个逻辑类似sql游标循环,自己网上查吧。
这个功能你最好不使用循环,尝试先把要插入的数据select出来,如果基础不好不能一步到位,就多利用零时表做缓存,
Select ecode , name from employees a where exists(select 1 from sal_custormer_1 where sal_custormer_1.tracke_man = a.encode)
一句话就完事儿了,再前面加个insert^_^
㈧ mssql 存储过程中循环如何写,在循环中用什么语句跳出循环呢,在线等
给你个例子:
for loop是这样的:
createprocere pro
begin
declare aintdefault1;
label1: loop
if a<6then
selecta;
seta=a+1;
iterate label1;
endif;
leave label1;跳出循环
endloop label1;
end
while是这样的:
createprocere pro
begin
declare aintdefault4;
while a<10 do
selecta;
seta=a+1;
endwhile;
end
㈨ Sqlserver存储过程如何写循环
declare @i int
set @i = 0
while @i < 100
begin
print @i
set @i = @i + 1
end
-- 定义循环变量
declare @loopIndex int set @loopIndex = 0
--定义循环次数
declare @count int set @count=1
-- 取得循环次数
select @count=count(1) from sys_user
-- 开始循环
while @loopIndex <= @count
begin
-- 定义接收参数
declare @USER_NAME nvarchar(50)
-- 取得循环的数据
SELECT @USER_NAME = hh.USER_NAME
FROM (SELECT ROW_NUMBER() OVER (ORDER BY USER_NAME) 'rowindex',USER_NAME FROM sys_user)hh
WHERE hh.rowindex = @loopIndex
-- 进行相关业务逻辑 例如输出结果
print @USER_NAME
-- 循环自动加一
set @loopIndex = @loopIndex + 1
end
begin
-- 定义错误返回信息
declare @error int
-- 定义接收参数
declare @User_Name varchar(50)
declare @Address varchar(50)
set @error=0
--定义游标
declare demo_cursor cursor
for (select User_Name,Address from sys_user)
--打开游标--
open demo_cursor
--开始循环游标变量--
fetch next from demo_cursor into @User_Name,@Address
while @@FETCH_STATUS = 0 --返回被 FETCH语句执行的最后游标的状态--
begin
print @User_Name+'____'+@Address
set @error= @error + @@ERROR --记录每次运行sql后是否正确,0正确
fetch next from demo_cursor into @User_Name,@Address --转到下一个游标,没有会死循环
end
close demo_cursor --关闭游标
deallocate demo_cursor --释放游标
end
更多内容请访问: https://mxdqh.top/