ORA-06502:PL / SQL:数字或值错误:字符到数字转换错误ORA-06512:“执行代码时

时间:2017-05-09 04:04:13

标签: oracle oracle10g oracle-sqldeveloper

for i in (select * from order_dtls order by 1 asc) loop

    select b.dealer_id
      into n_dealer
      from booking_mst b
     where b.booking_id = i.booking_id;

    dbms_output.put_line(n_cnt ||'--'|| to_char(sysdate,'yyyymmdd') ||'--'|| chr(1) || '43' ||'--'||
                         chr(1) || n_dealer ||'--'|| '1525' ||'--'|| '0' ||'--'|| i.amount ||'--'||
                         chr(1) || i.product_id ||'--'|| chr(1) || i.quantity ||'--'||
                         chr(1) || to_char(i.order_date,'yyyymmdd') + 1 ||'--'|| chr(1) ||
                         to_char(i.order_date,'yyyymmdd'));

    commit;

    n_cnt := n_cnt + 1;

  end loop;

1 个答案:

答案 0 :(得分:1)

问题在于:

. . . || to_char(i.order_date,'yyyymmdd') + 1  || 

目前被视为:

(. . . || to_char(i.order_date,'yyyymmdd')) + 1  || 

上面的隐式数字转换失败,因而错误。

将加法to_char(i.order_date,'yyyymmdd') + 1括在括号内:

dbms_output.put_line(n_cnt ||'--'|| to_char(sysdate,'yyyymmdd') ||'--'|| chr(1) || '43' ||'--'||
                     chr(1) || n_dealer ||'--'|| '1525' ||'--'|| '0' ||'--'|| i.amount ||'--'||
                     chr(1) || i.product_id ||'--'|| chr(1) || i.quantity ||'--'||
                     chr(1) || (to_char(i.order_date,'yyyymmdd') + 1) ||'--'|| chr(1) ||
                     to_char(i.order_date,'yyyymmdd'));

编辑:

正如Wernfried所说,您的代码中还有另一个问题。您应该在日期中添加1,而不是结果字符串。

所以正确的代码是:

括号内:

dbms_output.put_line(n_cnt ||'--'|| to_char(sysdate,'yyyymmdd') ||'--'|| chr(1) || '43' ||'--'||
                     chr(1) || n_dealer ||'--'|| '1525' ||'--'|| '0' ||'--'|| i.amount ||'--'||
                     chr(1) || i.product_id ||'--'|| chr(1) || i.quantity ||'--'||
                     chr(1) || to_char(i.order_date + 1,'yyyymmdd') ||'--'|| chr(1) ||
                     to_char(i.order_date,'yyyymmdd'));