ORA-00600: internal error code,求助!

z4qls 2015-06-09 02:20:36
异常信息如下:
ORA-00600: internal error code, arguments: [kglobpg_is_pkp], [0xF01A72C10], [], [], [], [], [], []
看网上说的600错误原因很多,我发现arguments后面的东西有所不同。有没有人解释下[kglobpg_is_pkp], [0xF01A72C10], [], [], [], [], [], []这串是什么意思?
存储过程是ETL_FUN_CLEAR调用ETL_PAC_CharConverterUtil,ETL_PAC_CharConverterUtil再调用java程序ClearCharUtil.toHalfAngle。
按照以下程序,ETL_FUN_CLEAR如果发生异常,则会插入日志表数据记录日志(ETL_PRO_ADDLOG),并将入参直接返回,并继续执行后面的程序。可实际发生的是日表里插入了这条数据,内容就是SQLERRM中的内容,可记录完日志后程序中止了,没有继续运行。困扰好久了,求指教问题原因。

此问题是偶发性问题,通过记录日志分析:近30天发生过1次,总体平均每三天一次,经常连续几天发生。

oracle版本
SELECT * FROM v$version ;
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

附上程序:

FUNCTION ETL_FUN_CLEAR(i_table_name IN VARCHAR2,
i_column_name IN VARCHAR2,
i_value IN VARCHAR2) RETURN VARCHAR2 IS
v_method_count number;
v_value varchar2(200);
v_method varchar2(100);
v_tablename varchar2(100);
v_columnname varchar2(100);
BEGIN
v_value := i_value;
v_value := ETL_PAC_CharConverterUtil.toHalfAngle(v_value);
return v_value;
exception
when others then
ETL_PAC_BASE.ETL_PRO_ADDLOG('ETL_PAC_CLEAR',
'ETL_FUN_CLEAR',
'',
SQLCODE || '-' || v_method || '-' ||
v_tablename || '-' || v_columnname || '-' || v_value,
SQLERRM);
return v_value;
END ETL_FUN_CLEAR;

create or replace package body ETL_PAC_CharConverterUtil is

-- Private type declarations
--type <TypeName> is <Datatype>;

-- Private constant declarations
--<ConstantName> constant <Datatype> := <Value>;

-- Private variable declarations
--<VariableName> <Datatype>;

-- Function and procedure implementations
function toHalfAngle(v_value varchar2) return varchar2 AS
language java name 'ClearCharUtil.toHalfAngle(java.lang.String) return java.lang.String';
function removeAllChar(v_value varchar2) return varchar2 as
language java name 'ClearCharUtil.removeAllChar(java.lang.String) return java.lang.String';
function removeBlank(v_value varchar2) return varchar2 as
language java name 'ClearCharUtil.removeBlank(java.lang.String) return java.lang.String';
function removeSpareBlank(v_value varchar2) return varchar2 as
language java name 'ClearCharUtil.removeSpareBlank(java.lang.String) return java.lang.String';
--begin
-- Initialization
--<Statement>;
end ETL_PAC_CharConverterUtil;

create or replace and compile java source named "ClearCharUtil" as
import java.util.List;
import java.util.regex.Pattern;

public class ClearCharUtil {

/**
* 全角转半角 半角字符串
*
* @return String
*/
public static String toHalfAngle(String str) {
char c[] = str.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == '\\u3000') {
c[i] = ' ';
} else if (c[i] > '\\uFF00' && c[i] < '\\uFF5F') {
c[i] = (char) (c[i] - 65248);
}
}
String outStr = new String(c);
return outStr;
}
}
...全文
275 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
z4qls 2015-06-15
  • 打赏
  • 举报
回复
查出了点眉目,下面这段java代码编译是报错的。 正确的写法应该是把"\\"换成"\"。 但是奇怪的是我改好后再编译,编译成功后关掉窗口,再重新查看源,发现里面又变成“\\”了。 哪位大神知道这是什么原因吗? 我用的是pl/sql Developer 11。

  public static String toHalfAngle(String str) {
        char c[] = str.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == '\\u3000') {
                c[i] = ' ';
            } else if (c[i] > '\\uFF00' && c[i] < '\\uFF5F') {
                c[i] = (char) (c[i] - 65248);
            }
        }
        String outStr = new String(c);
        return outStr;
    }
z4qls 2015-06-09
  • 打赏
  • 举报
回复
引用 2 楼 wangchangming 的回复:
一个全半角转换被你整得如此麻烦,Oracle函数早已实现了该功能
SQL> select to_single_byte('计算.()机') from dual;

TO_SINGLE
---------
计算.()机

SQL> select to_multi_byte('计算.()机') from dual;

TO_MULTI_BYT
------------
计算.()机
哎,先人写的程序,维护而已。。痛苦~
wangchangming 2015-06-09
  • 打赏
  • 举报
回复
一个全半角转换被你整得如此麻烦,Oracle函数早已实现了该功能
SQL> select to_single_byte('计算.()机') from dual;

TO_SINGLE
---------
计算.()机

SQL> select to_multi_byte('计算.()机') from dual;

TO_MULTI_BYT
------------
计算.()机
z4qls 2015-06-09
  • 打赏
  • 举报
回复
补充一下,调用这个函数的地方是这样的一段程序。

      update Temp_PrpDcstP
         set IdentifyType      = ETL_FUN_CLEAR('PRPDCSTP',
                                               'IDENTIFYTYPE',
                                               cur.IdentifyType),
             IdentifyNumber    = ETL_FUN_CLEAR('PRPDCSTP',
                                               'IDENTIFYNUMBER',
                                               cur.IdentifyNumber),
             DateValid         = ETL_FUN_CLEAR('PRPDCSTP',
                                               'DATEVALID',
                                               cur.DateValid),
             Gender            = ETL_FUN_CLEAR('PRPDCSTP',
                                               'GENDER',
                                               cur.Gender),
             BirthDate         = ETL_FUN_CLEAR('PRPDCSTP',
                                               'BIRTHDATE',
                                               cur.BirthDate),
             DeathDate         = ETL_FUN_CLEAR('PRPDCSTP',
                                               'DEATHDATE',
                                               cur.DeathDate),
             Health            = ETL_FUN_CLEAR('PRPDCSTP',
                                               'HEALTH',
                                               cur.Health),
             Stature           = ETL_FUN_CLEAR('PRPDCSTP',
                                               'STATURE',
                                               cur.Stature),
             Weight            = ETL_FUN_CLEAR('PRPDCSTP',
                                               'WEIGHT',
                                               cur.Weight),
             Marriage          = ETL_FUN_CLEAR('PRPDCSTP',
                                               'MARRIAGE',
                                               cur.Marriage),
             Nationality       = ETL_FUN_CLEAR('PRPDCSTP',
                                               'NATIONALITY',
                                               cur.Nationality),
             HouseProperty     = ETL_FUN_CLEAR('PRPDCSTP',
                                               'HOUSEPROPERTY',
                                               cur.HouseProperty),
             RegionCode        = ETL_FUN_CLEAR('PRPDCSTP',
                                               'REGIONCODE',
                                               cur.RegionCode),
             FamilySumQuantity = ETL_FUN_CLEAR('PRPDCSTP',
                                               'FAMILYSUMQUANTITY',
                                               cur.FamilySumQuantity),
             BloodType         = ETL_FUN_CLEAR('PRPDCSTP',
                                               'BLOODTYPE',
                                               cur.BloodType),
             Favourite         = ETL_FUN_CLEAR('PRPDCSTP',
                                               'FAVOURITE',
                                               cur.Favourite),
             Interest          = ETL_FUN_CLEAR('PRPDCSTP',
                                               'INTEREST',
                                               cur.Interest),
             SelfMonthIncome   = ETL_FUN_CLEAR('PRPDCSTP',
                                               'SELFMONTHINCOME',
                                               cur.SelfMonthIncome),
             SmIncomeCurrency  = ETL_FUN_CLEAR('PRPDCSTP',
                                               'SMINCOMECURRENCY',
                                               cur.SmIncomeCurrency),
             FamilyMonthIncome = ETL_FUN_CLEAR('PRPDCSTP',
                                               'FAMILYMONTHINCOME',
                                               cur.FamilyMonthIncome),
             FmIncomeCurrency  = ETL_FUN_CLEAR('PRPDCSTP',
                                               'FMINCOMECURRENCY',
                                               cur.FmIncomeCurrency)
       where CustomerCode = cur.CustomerCode;

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧