我拼了一段sql    insertsql := 'insert into IF_ENERGY_HIS_SUB
    values
      (' || COL_ENERGY_HIS_SUB.ENERGY_HIS_SUB_ID || ',' ||
                 COL_ENERGY_HIS_SUB.orgid || ',' ||
                 COL_ENERGY_HIS_SUB.equip_id || ',' ||
                 COL_ENERGY_HIS_SUB.energy_type_id || ',' ||
                 COL_ENERGY_HIS_SUB.ym || ',' ||
                 COL_ENERGY_HIS_SUB.consume_sub || ',' ||
                 COL_ENERGY_HIS_SUB.output || ',' ||
                 COL_ENERGY_HIS_SUB.process_equip || ',' ||
                 COL_ENERGY_HIS_SUB.ym || ');';
然后执行EXECUTE IMMEDIATE insertsql;
  v_record_number:=SQL%ROWCOUNT;
  dbms_output.put_line(v_record_number) ; --输出正确结果
  commit;  --提交结果
  EXCEPTION WHEN OTHERS THEN 
    dbms_output.put_line(' 错误原因:【 '||SQLERRM||' 】'|| insertsql) ; --输出错误处理
    begin
      commit;
      end;意在如果成功的话,打印出执行成功的记录,不成功的话,打出错误原因,不过确实是错的,执行如下: 错误原因:【 ORA-00972: identifier is too long 】insert into IF_ENERGY_HIS_SUB
    values
      (B1303C70C98647799B04CF7AC7EB3C2D,11,3165B160B23E46BEA46F94BC12470FF5,33B3E09D4F3A4CDFA0750639B9E1FFB3,01-FEB-11,.08,,0,01-FEB-11);请问是不是我的串拼的不对阿,应该择优写呢

解决方案 »

  1.   

    是的,没有拼单引号,字符串类型时需要加单引号,但在字符串中,两个单引号代表sql语句中的一个单引号。
      

  2.   

    【 ORA-00972: identifier is too long 】
      

  3.   


    long的原因就是串拼的不对因此太长,但是又不知道怎么拼
      

  4.   

    COL_ENERGY_HIS_SUB这个不带行不,你都超过30个字符的标示了
      

  5.   

    你可以先把你的insertsql打印出来,就可以看到你的那语句是有问题的
      

  6.   

    insertsql := 'insert into IF_ENERGY_HIS_SUB
        values
          (''' || COL_ENERGY_HIS_SUB.ENERGY_HIS_SUB_ID || ''',' ||
    后面是字符串类型的如法炮制。
    对头,你可以首先把该SQL打印出来,看是否拼接正确。