PROCEDURE INSERTTABLE IS
  BEGIN
    FOR D IN (SELECT * FROM TEST) LOOP
               
      INSERT INTO A
        (PKID,
         NAME)
      VALUES
        (D.PKID,
         D.NAME);
    END LOOP;
    
  END INSERTTABLE;执行到“FOR” 的时候 报错 ORA-00900:无效SQL语句
我看网上语法是这样的,不知道为什么执行不通过。oracle for loop

解决方案 »

  1.   

    insert into 语句写错了,自己百度一下语法。
      

  2.   

    我感觉要实现你的功能不应该写FOR
    应该使用游标
      

  3.   

    感觉没什么问题呢,我试了一下正常执行,只是SELECT * FROM TEST这里换了一下,test表结构什么样的?
      

  4.   

    SELECT * FROM TESTINSERT INTO A(PKID,NAME)
          VALUES(D.PKID,D.NAME);
    你先确定这两句对了再说。
      

  5.   

    1)确认当前的表空间中是否有test表,也就是楼上说的select * from test;是否有错,如果有错或者不在当前用户的表空间中则查询中加上表空间名,没有权限则授权。
    2)插入的数据类型是否一致也需要检查一下。
      

  6.   

    你少写了个create or replaceCREATE OR REPLACE PROCEDURE INSERTTABLE
     IS
      BEGIN
        FOR D IN (SELECT * FROM TEST)  LOOP
          INSERT INTO A(PKID,NAME) VALUES (D.PKID,D.NAME);
          commit;
        END LOOP;  END INSERTTABLE; 
      

  7.   

     BEGIN
        FOR D IN (SELECT * FROM TEST) LOOP
                   
          INSERT INTO A
            (PKID,
             NAME)
          VALUES
            (D.PKID,
             D.NAME);
        END LOOP;这段程序段语法是没有问题的,主要看是否字段写错了。