重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果是 1,2,3和1,2,3,4,5分别以整体的数据加到 table2中
创新互联公司凭借在网站建设、网站推广领域领先的技术能力和多年的行业经验,为客户提供超值的营销型网站建设服务,我们始终认为:好的营销型网站就是好的业务员。我们已成功为企业单位、个人等客户提供了网站建设、成都网站制作服务,以良好的商业信誉,完善的服务及深厚的技术力量处于同行领先地位。
declare
v_a table1.a%type;
v_str varchar2(2000);
begin
select a into v_a from table1;
for v_aa in 1..v_a loop
if(length(str)=0)then
str:=v_aa;
else
str:=str ||','|| v_aa;
end if;
end loop;
insert into table2 values(str);
end;
/
是分别循环加到table2中
declare
v_a table1.a%type;
begin
select a into v_a from table1;
for v_aa in 1..v_a loop
insert into table2 values(v_aa);
end loop;
end;
/
这种情况必须定义行类型的变量来解决:
declare
row_data tb_student%ROWTYPE
for row_data in tb_student loop
update student st set st.class_name = row_data.class_name
where st.class_id = row_data.class_id
end loop;
但这样种循环更新效率确实很低,SQL是面向集合的运算,像你这种需求可以用一条更新SQL外加子查询来解决,不建议用循环来做。
一、GOTO循环用法
DECLARE
x number;
BEGIN
x := 9;
repeat_loop --循环点
x := x - 1;
dbms_output.put_line(x);
IF x 0 THEN
GOTO repeat_loop; --当x的值0时,就goto到repeat_loop
END IF;
END;
/*以上语句翻译如下:
declare 定义变量;
begin...end语句块
x 变量赋值
repeat_loop 设置循环点
循环内容
x 变量递减
按行打印 x
IF...END IF语句块
IF...(条件) THEN :满足IF条件 则
GOTO语句 前往循环点
*/
二、FOR循环用法
DECLARE
x number;
BEGIN
FOR i in 2..10 LOOP
dbms_output.put_line(i);
END LOOP;
END;
--最简单的循环?
/*
declare 定义变量
begin...end语句块
for...loop...end loop; 语句
*/
三、WHILE循环用法
DECLARE
x number;
BEGIN
x :=5;
WHILE x 1 LOOP
x := x - 1;
dbms_output.put_line('循环内'||x);
END LOOP;
dbms_output.put_line('循环外'||x);
END;
/*
declare 定义变量
begin...end 语句块
while...loop...end loop; 语句
*/
四、LOOP循环用法
DECLARE
x number;
BEGIN
x :=0;
LOOP
x := x + 1;
EXIT WHEN x 9; --这里有个";"号
dbms_output.put_line('内'||x);
END LOOP;
dbms_output.put_line('外'||x);
END;
/*
declare 定义变量
begin...end
x 变量赋值
loop...end loop语句
exit when ...(条件) ;
*/
写循环的操作方法和步骤如下:
1、第一步,编写存储过程的整体结构,然后定义变量,见下图。
2、其次,完成上述步骤后,在定义变量后定义游标,begin,select sysdate into v_date from dual,end test_proc,如下图所示。
3、接着,完成上述步骤后,写一个for循环,游标开始for循环,为临时变量名任意起个名,输出一个字段,使用变量名.列名就好了,最后游标for循环就结束了,如下图所示。
4、最后,完成上述步骤后,试运行,单击“
DBMS Output”选项卡进行检查,运行成功,见下图。这样,问题就解决了。
set serveroutput on;
declare
sum3 number :=0;
begin
for i in (select sal from emp where empno between 7000 and 8000) loop
sum3:=sum3+i.sal;
--dbms_output.put_line(i.sal);
end loop;
dbms_output.put_line('员工编号范围是7000到8000工资的和是'||sum3);
end;
/
--广科
procedure copy(a_id int) is
cursor t_cursor is
select * from table f where f.id = a_id;
v_row table%rowtype;
begin
for v_row in t_cursor loop
-- 处理数据
end loop;
end copy;