ORA-06502: PL/SQL: 数字或值错误: 字符到数字的转换错误

Posted

技术标签:

【中文标题】ORA-06502: PL/SQL: 数字或值错误: 字符到数字的转换错误【英文标题】:ORA-06502: PL/SQL: numeric or value error: character to number conversion error 【发布时间】:2010-12-15 10:57:05 【问题描述】:
create or replace procedure summery_report_date_range (start_date in varchar2 , end_date in varchar2  )

is

cursor cursor_audit is SELECT  audit_action, COUNT(audit_action), audit_user, audit_date , 

TABLE_NAME 
    FROM (
        select  audit_action, audit_user, audit_date, 'store_audit' TABLE_NAME
           from stores_audit 


         UNION ALL  
         select  audit_action, audit_user, audit_date, 'customer_audit' TABLE_NAME
           from customer_audit


    UNION ALL  
         select  audit_action, audit_user, audit_date, 'category_audit' TABLE_NAME
           from category_audit



     UNION ALL  
         select  audit_action, audit_user, audit_date, 'orders_audit' TABLE_NAME
           from orders_audit   

         )"MYTBL"
            where (audit_date between TO_DATE(start_date, 'DD-MON-YY')   and TO_DATE(end_date, 'DD-MON-YY')  ) 
         GROUP BY audit_action, audit_user, audit_date, TABLE_NAME
        ORDER BY audit_user;    

rec_user    stores_audit.audit_user%TYPE;

rec_total   number;

rec_action  stores_audit.audit_action%TYPE;

rec_date    stores_audit.audit_date%TYPE;

rec_id      stores_audit.audit_id%TYPE;


begin

open cursor_audit;

fetch cursor_audit into rec_action, rec_total,rec_user,rec_date,rec_id ;

while cursor_audit%found

loop

  dbms_output.put_line('User : '||rec_user ||', Action : ' ||
                     rec_action ||', Date  From: ' ||start_date ||' To ' || END_DATE || ' Total Action : ' || rec_total );

  fetch cursor_audit into  rec_action, rec_total, rec_user,rec_date,rec_id ;

end loop;

close cursor_audit;

EXCEPTION
  WHEN NO_DATA_FOUND THEN
  DBMS_OUTPUT.PUT_LINE('Data Not Found.');

  WHEN INVALID_CURSOR THEN 
  DBMS_OUTPUT.PUT_LINE('INVALID_CURSOR.');

  WHEN OTHERS THEN 
  DBMS_OUTPUT.PUT_LINE(SQLERRM || '   ' ||SQLCODE);

  end;

/

execute summery_report_date_range('01-DEC-10' , '31-DEC-10');

我在执行此过程时遇到此错误,我不知道确切的错误在哪里

【问题讨论】:

对于初学者,如何将DBMS_OUTPUT.PUT_LINE(SQLERRM || ' ' ||SQLCODE); 替换为DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); - 这应该显示是哪一行导致了问题。 【参考方案1】:

stores_audit.audit_id 的数据类型是什么?它的名字暗示它可能是数字,但您正在将字符串提取到其中。

【讨论】:

以上是关于ORA-06502: PL/SQL: 数字或值错误: 字符到数字的转换错误的主要内容,如果未能解决你的问题,请参考以下文章

ORA-06502: PL/SQL: 数字或值错误: 字符到数字的转换错误

ORA-06502: PL/SQL: 数字或值错误: NULL 索引表键值

ORA-06502: PL/SQL: 数字或值错误: 数字精度太大

获取 ORA-06502:PL/SQL:数字或值错误:SQL 触发器中的字符到数字转换错误

oracle ORA-06502:PL/SQL:数字或值错误:批量绑定:截断绑定

ORA - 06502:PL/SQL:数字或值错误:批量绑定:截断绑定