................
StrSql := ' select t.itemindex,t.checkmethod,t.checkevaluate from  telldo.satetyEvaluate '
open Tempcourse for StrSql ;
    loop
          
        Fetch Tempcourse  into 
                                itemindex,         -- varchar2(50)
                                checkmethod,       -- varchar2(4000)
                                checkevaluate;    -- varchar2(4000) 
              StrSql:=' insert into telldo.countySatetyEvaluate (itemindex,checkmethod,checkevaluate,mainid) value('''|| itemindex ||''','''|| checkmethod || ''','''|| checkevaluate||''',telldo.SEQ_satetyEvluate)';
              execute immediate StrSql;
    end loop ;     
-----------------------------------------------------------------------------------------
  satetyEvaluate 表中存储的是一个国家标准,有700多条记录.我debug 跟踪过程中发现,循环了20多条记录后,报错。
我猜是变量中含有非法字符,我该怎么才能把数据正确插入到表中呢?
  如果从satetyEvaluate 中删除80%的记录,则可以正确插入到新表中。

解决方案 »

  1.   

    StrSql:=' insert into telldo.countySatetyEvaluate (itemindex,checkmethod,checkevaluate,mainid) select t.itemindex,t.checkmethod,t.checkevaluate,telldo.SEQ_satetyEvluate from  telldo.satetyEvaluate'; 
    execute immediate StrSql; 不用游标,直接insert
      

  2.   

    telldo.SEQ_satetyEvluate这是什么,procedure?
      

  3.   

    试试游标数据不取出来,用for i in cursor那种方式
      

  4.   

    把sql输出来显示,看看具体哪句有问题,再根据其进行修改。
      

  5.   

    你用变脸绑定不是更好吗,可读性要高得多。
    你原来的sql,如果某个变量有单引号,就会有问题,你也可以把变量里的一个单引号替换成两个