CREATE OR REPLACE procedure test_bind_v1  IS 
BEGIN
DECLARE
id  number;
BEGIN
for id in (SELECT ID FROM tb_b_cw_38__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__cons_template )
我是在书上看的,想试验下这种用法,但是编译报错

解决方案 »

  1.   

    改成下面的形式:
    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;
    /
      

  2.   

    CREATE OR REPLACE procedure test_bind_v1  IS 
    BEGIN 
    DECLARE 
    id  number; --去掉这一句就对了
    BEGIN 
    for id in (SELECT ID FROM tb_b_cw_38__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__cons_template ) 
      

  3.   

    -- 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;
      

  4.   


    CREATE OR REPLACE procedure test_bind_v1  IS 
    BEGIN 
      for X in (SELECT ID FROM tb_b_cw_38__cons_template ) 
      loop 
        INSERT INTO test_bind (id) VALUES(X.ID); 
      end loop ; 
      COMMIT; 
    end test_bind_v1; 
    /