存储过程中的for循环的条件可以这样写吗?

depositpei 2008-10-10 01:44:21
CREATE OR REPLACE procedure test_bind_v1 IS
BEGIN
DECLARE
id number;
BEGIN
for id in (SELECT ID FROM tb_b_cw_38_mark_cons_template )
loop
INSERT INTO test_bind (id) VALUES( id);
COMMIT;
end loop ;
END;
end test_bind_v1;

--这个ID 来自于这个查询子集(SELECT ID FROM tb_b_cw_38_mark_cons_template )
我是在书上看的,想试验下这种用法,但是编译报错
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyrongg 2008-10-10
  • 打赏
  • 举报
回复

CREATE OR REPLACE procedure test_bind_v1 IS
BEGIN
for X in (SELECT ID FROM tb_b_cw_38_mark_cons_template )
loop
INSERT INTO test_bind (id) VALUES(X.ID);
end loop ;
COMMIT;
end test_bind_v1;
/
mantisXF 2008-10-10
  • 打赏
  • 举报
回复
-- FYI:
DECALRE
v_tot_salary EMP.SALARY%TYPE;
BEGIN
FOR r_dept IN (SELECT deptno,dname FROM dept ORDER BY deptno) LOOP
  DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname);
  v_tot_salary:=0;
 FOR r_emp IN (SELECT ename,salary
  FROM emp
  WHERE deptno=p_dept
  ORDER BY ename) LOOP
 DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary);
  v_tot_salary:=v_tot_salary+v_salary;
 END LOOP;
 DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary);
END LOOP;
END;
[Quote=引用楼主 depositpei 的帖子:]
CREATE OR REPLACE procedure test_bind_v1 IS
BEGIN
DECLARE
id number;
BEGIN
for id in (SELECT ID FROM tb_b_cw_38_mark_cons_template )
loop
INSERT INTO test_bind (id) VALUES( id);
COMMIT;
end loop ;
END;
end test_bind_v1;

--这个ID 来自于这个查询子集(SELECT ID FROM tb_b_cw_38_mark_cons_template )
我是在书上看的,想试验下这种用法,但是编译报错
[/Quote]
wfqqwer5213 2008-10-10
  • 打赏
  • 举报
回复
CREATE OR REPLACE procedure test_bind_v1 IS
BEGIN
DECLARE
id number; --去掉这一句就对了
BEGIN
for id in (SELECT ID FROM tb_b_cw_38_mark_cons_template )
loop
INSERT INTO test_bind (id) VALUES( id);
COMMIT;
end loop ;
END;
end test_bind_v1;

--这个ID 来自于这个查询子集(SELECT ID FROM tb_b_cw_38_mark_cons_template )
oracledbalgtu 2008-10-10
  • 打赏
  • 举报
回复
改成下面的形式:
CREATE OR REPLACE PROCEDURE TEST_BIND_V1 IS
BEGIN
DECLARE
ID NUMBER;
BEGIN
FOR ID IN (SELECT ID FROM TB_B_CW_38_MARK_CONS_TEMPLATE) LOOP
INSERT INTO TEST_BIND (ID) VALUES (ID.ID);
COMMIT;
END LOOP;
END;
END TEST_BIND_V1;
/


[Quote=引用楼主 depositpei 的帖子:]
CREATE OR REPLACE procedure test_bind_v1 IS
BEGIN
DECLARE
id number;
BEGIN
for id in (SELECT ID FROM tb_b_cw_38_mark_cons_template )
loop
INSERT INTO test_bind (id) VALUES( id);
COMMIT;
end loop ;
END;
end test_bind_v1;

--这个ID 来自于这个查询子集(SELECT ID FROM tb_b_cw_38_mark_cons_template )
我是在书上看的,想试验下这种用法,但是编译报错
[/Quote]

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧