㈠ oracle存储过程怎么写循环
写循环的操作方法和步骤如下:
1、第一步,编写存储过程的整体结构,然后定义变量,见下图。

㈡ oracle 存储过程的loop <<
<<>>
这样的写法是个标记,无实际意义,如果脚本中有GOTO语句,走到GOTO语句后会直接跳转到标记所在的行。
㈢ 如何在存储过程中使用Loop
ascursor 应该是as cursor
w_name varchar2 这点应该声明数据类型的大小,如:varchar2(50);同时变量名最好不要和字段名同名。
begin dbms_output.put_line(w_name); end; 这儿可以不用写begin end;直接写dbms_output.put_line(w_name);
如:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME WORK_ORACLE_TEST%Rowtype;
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
也可以:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME VARCHAR2(50);
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
㈣ oracle存储过程 loop字符串遍历
sql">declare
xvarchar2(20);
v_lengthint;
yint;
v_strvarchar2(1);
begin
x:='wqr3331412rr';
selectlength(x)intov_lengthfromal;
y:=1;
whiley<=v_lengthloop
selectsubstr(x,y,1)intov_strfromal;
dbms_output.put_line(v_str);
y:=y+1;
endloop;
end;
直接运行吧,结果如图

㈤ 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; --关闭游标
㈥ 怎么写存储过程
一、整体格式。存储过程的格式如下:
CREATE PROCEDURE [creator.]"proc_name" ( /* parameters,... */ )
/* RESULT ( column-name,... ) */
BEGIN
;
END
其中creator是用户名,比如dba;proc_name是你自己起的过程名;后面的参数可有可无,视自己情况定,如果有格式如(a integer,b char(50));再下面的RESULT应该是返回值,这个没用过不知道怎么回事!
二、内容。把这些都写好了可能是这样:
CREATE PROCEDURE dba.myProcere ( @a integer,@b char(50))
BEGIN
;
END
但是这样子还是不能编译的,因为整个过程体是空的,而我学习的结果是过程中至少要有一个SQL语句。所以要这样写才不会出错:
CREATE PROCEDURE dba.myProcere ( a integer,b char(50))
BEGIN
SELECT * FROM MyTable
END
三、语法。
1、分号。在写的过程中最郁闷的问题是分号!最后发现好像是这样:
每一句都要加分号,不管是SQl语句还是其它的什么语句,但是最后保存后最后一句的分号会被自动删除!(我用的是Sybase的Sybase Central)。
2、定义变量。
格式为Declare @varName integer;(注意有分号!)“@”号好像可有可无!
3、SELECT语句。
格式为:
SELECT Count(*) INTO @varName FROM MyTable WHERE id = @a;
4、if语句。
格式为:
if(varName > 0) then
return
end if;(注意还有分号!)
5、循环语句。
格式为:
loop
……
end loop;(注意分号!)
6、设置变量值。
格式为:
set @varName = 10;
set @varName = @varName2;
7、字符串。
Declare myString char(50);
set @myString = 'Hello!';
要用单引号!
8、定义游标。
格式为:
declare MyCursor dynamic scroll cursor for
select …… from …… where ……;
9、打开、使用和关闭游标。
Open MyCursor;
fetch next MyCursor into ……;
Close MyCursor;
10、调用方法。
string ls_name="test"
DECLARE ProcName1 PROCEDURE FOR ProcName2
@wg_wellid=2,@wg_wgid=1,@wg_stringsid=1,@bha_wellid=2,@bha_name=:ls_name;
execute ProcName1 ;
close ProcName1 ;
其中ProcName1 是调用程序中自定义的过程名,ProcName2是数据库中存储过程的名字,下面的传入的参数。
㈦ oracle存储过程for in loop的问题
ascursor 应该是as cursor
w_name varchar2 这点应该声明数据类型的大小,如:varchar2(50);同时变量名最好不要和字段名同名。
begin dbms_output.put_line(w_name); end; 这儿可以不用写begin end;直接写dbms_output.put_line(w_name);
如:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME WORK_ORACLE_TEST%Rowtype;
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
也可以:
CREATE OR REPLACE PROCEDURE TEST_FORINLOOP() AS
CURSOR TEST_CURSOR IS
SELECT W_NAME FROM WORK_ORACLE_TEST;
V_NAME VARCHAR2(50);
BEGIN
FOR V_NAME IN TEST_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE(V_NAME);
END LOOP;
END TESTFORINLOOP;
㈧ oralce存储过程怎么用loop进行双重循环呀
全部过程都给出来,光这一段看不出来
㈨ 新手求教: 一个oracle存储过程中使用CURSOR 和loop循环 怎样写可以实现:如果某此loop循环,发生异常报-O
CREATE OR REPLACE PROCEDURE p_test_emp is
CURSOR c1 is
select empno, ename from emp;
t_c1 c1%rowtype;
err exception;
begin
open c1;
loop
FETCH c1
INTO t_c1;
if (c1%found) then
insert into emp_test (empno, ename) values (t_c1.empno, t_c1.ename);
commit;
else
raise err;(这个err 需要在前面定义的,类型为异常)
end if;
end loop;
close c1;
EXCEPTION
when err then
(这里可以写上你需要的提示)
WHEN OTHERS THEN
rollback;
end;
这样写的好处就是 当里面发生错误的时候直接跳到异常中的err 不会中断这段代码的执行。
楼上说的把exeception放到循环里面也是不行的,主要就是要修改exeception中,不能rollback,否则的一定执行不下去。如果有疑问我们继续讨论。
㈩ 存储过程loop exit mysql中没有exit么
visual foxpro吗,loop是回到循环条件判断是否能满足循环条件继续循环,exit则是退出一层循环,执行循环后面的语句