为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:centos7
【CPU】:x86
【问题描述】*:已经配置了page_size=32,从oracle中同步过来的package编译报错
源oracle中package包体内容如下:
TYPE IDMAP is table of number index by varchar2(512);
TYPE CHECKIDMAP is table of number index by varchar2(4000);
TYPE UDTMAP is table of varchar2(4000) index by varchar2(512);
TYPE NAMEMAP is table of varchar2(512) index by varchar2(512);
DATABASEIDS IDMAP;
TABLEIDS IDMAP;
VIEWIDS IDMAP;
COLUMNIDS IDMAP;
CONSTRAINTIDS IDMAP;
PKEYIDS IDMAP;
CHECKIDS CHECKIDMAP;
UDTNAMEMAP UDTMAP;
PKEYNAMEMAP NAMEMAP;
logLine NUMBER := 1;
uniqueId NUMBER := 1;
nProjectId NUMBER;
projectExist BOOLEAN;
nSvrId NUMBER; -- This is the captured connection id
nDummyCatalogId NUMBER; -- Teradata does not have catalogs so insert a dummy one
pluginClass varchar2(500) := null;
PROCEDURE SetStatus(msg VARCHAR2, sev NUMBER := 666);
-- PROCEDURE DisableRepositoryTriggers IS
-- BEGIN
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_projects_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_catalogs_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_schemas_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_tables_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_views_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_indexes_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_stored_programs_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_triggers_trg DISABLE';
-- --EXECUTE IMMEDIATE 'ALTER TRIGGER md_constraints_trg DISABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_columns_trg DISABLE';
-- END DisableRepositoryTriggers;
-- PROCEDURE EnableRepositoryTriggers IS
-- BEGIN
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_projects_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_catalogs_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_schemas_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_tables_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_views_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_indexes_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_stored_programs_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_triggers_trg ENABLE';
-- --EXECUTE IMMEDIATE 'ALTER TRIGGER md_constraints_trg ENABLE';
-- EXECUTE IMMEDIATE 'ALTER TRIGGER md_columns_trg ENABLE';
-- END EnableRepositoryTriggers;
FUNCTION getTypeLenCode(type VARCHAR2, COLUMNLENGTH NUMBER, DECIMALTOTALDIGITS NUMBER, DECIMALFRACTIONALDIGITS NUMBER) RETURN NUMBER IS
BEGIN
if (type IS NULL) THEN
return 0;
END IF;
RETURN CASE TRIM(type)
WHEN 'AT' THEN 26 -- ANSITIME
WHEN 'BF' THEN COLUMNLENGTH -- BYTEFIXED
WHEN 'BO' THEN -8 -- BYTELARGEOBJECT
WHEN 'BS' THEN 0 -- BINARYSTRING
WHEN 'BV' THEN -2 -- BYTEVARYING
WHEN 'CF' THEN COLUMNLENGTH -- CHARFIXEDLATIN
WHEN 'CO' THEN -8 -- CHARLARGEOBJECT
WHEN 'CS' THEN 0 -- CHARSTRING
WHEN 'CV' THEN 0 -- CHARVARYINGLATIN
WHEN 'D ' THEN 4 -- DECIMAL
WHEN 'D' THEN 4 -- DECIMAL
WHEN 'DA' THEN 10 -- DATE
WHEN 'DH' THEN DECIMALTOTALDIGITS + 10 -- DAYHOUR
WHEN 'DI' THEN 0 -- DAYINTERVAL
WHEN 'DM' THEN DECIMALTOTALDIGITS + 10 -- DAYMINUTE
WHEN 'DS' THEN CASE DECIMALFRACTIONALDIGITS > 0
WHEN TRUE THEN DECIMALTOTALDIGITS + 10
ELSE DECIMALTOTALDIGITS + DECIMALFRACTIONALDIGITS + 11
END -- DAYSECOND
WHEN 'DT' THEN 0 -- DATETAG
WHEN 'DY' THEN DECIMALTOTALDIGITS + 10 -- DAY
WHEN 'F ' THEN 0 -- REAL
WHEN 'F' THEN 0 -- REAL
WHEN 'HM' THEN CASE DECIMALTOTALDIGITS
WHEN 4 THEN 10 + 3
WHEN 3 THEN 10 + 2
ELSE 10 + 1
END -- HOURMINUTE
WHEN 'HR' THEN CASE DECIMALTOTALDIGITS
WHEN 4 THEN 10 + 3
WHEN 3 THEN 10 + 2
ELSE 10 + 1
END -- HOUR
WHEN 'HS' THEN CASE DECIMALTOTALDIGITS
WHEN 4 THEN CASE DECIMALFRACTIONALDIGITS > 0
WHEN TRUE THEN 11 + 3
ELSE 10 + 3
END
WHEN 3 THEN CASE DECIMALFRACTIONALDIGITS > 0
WHEN TRUE THEN 11 + 2
ELSE 10 + 2
END
ELSE CASE DECIMALFRACTIONALDIGITS > 0
WHEN TRUE THEN 11 + 1
ELSE 10 + 1
END
END -- HOURSECOND
WHEN 'I ' THEN 4 -- INTEGER
WHEN 'I' THEN 4 -- INTEGER
WHEN 'I1' THEN 1 -- BYTEINT
WHEN 'I2' THEN 2 -- SMALLINT
WHEN 'I8' THEN 8 -- BIGINTEGER
WHEN 'LF' THEN 0 -- CHARFIXEDLOCALE
WHEN 'LV' THEN 0 -- CHARVARYINGLOCALE
WHEN 'MI' THEN 11 -- MINUTE
WHEN 'MO' THEN CASE DECIMALTOTALDIGITS
WHEN 4 THEN 3 + 4
WHEN 3 THEN 2 + 4
ELSE 1 + 4
END -- MONTH
WHEN 'MS' THEN CASE DECIMALFRACTIONALDIGITS > 0
WHEN TRUE THEN 12 + DECIMALFRACTIONALDIGITS
ELSE 11
END -- MINUTETOSECOND
WHEN 'NM' THEN 0 -- NUMBERTAG
WHEN 'PD' THEN 28 -- must match oracle.dbtools.migration.workbench.plugin.Teradata13Plugin.PERIOD_DATE_LENGTH
WHEN 'PM' THEN 72 -- must match oracle.dbtools.migration.workbench.plugin.Teradata13Plugin.PERIOD_TIMESTAMP_WITH_TZ_LENGTH
WHEN 'PS' THEN 60 -- must match oracle.dbtools.migration.workbench.plugin.Teradata13Plugin.PERIOD_TIMESTAMP_LENGTH
WHEN 'PT' THEN 38 -- must match oracle.dbtools.migration.workbench.plugin.Teradata13Plugin.PERIOD_TIME_LENGTH
WHEN 'PZ' THEN 50 -- must match oracle.dbtools.migration.workbench.plugin.Teradata13Plugin.PERIOD_TIME_WITH_TZ_LENGTH
WHEN 'SC' THEN CASE DECIMALFRACTIONALDIGITS > 0
WHEN TRUE THEN 12 + DECIMALFRACTIONALDIGITS
ELSE 11
END -- SECOND
WHEN 'SZ' THEN 31 -- TIMESTAMPWITHTIMEZONE
WHEN 'TM' THEN 0 -- TIMETAG
WHEN 'TS' THEN 26 -- TIMESTAMPWITHOUTTIMEZONE
WHEN 'TZ' THEN 21 -- ANSITIMEWITHTIMEZONE
WHEN 'UF' THEN 0 -- CHARFIXEDUNICODE
WHEN 'UT' THEN 0 -- USERDEFINEDTYPE
WHEN 'UV' THEN 0 -- CHARVARYINGUNICODE
WHEN 'YI' THEN 0 -- YEARINTERVAL
WHEN 'YM' THEN DECIMALTOTALDIGITS + 4 -- YEARMONTH
WHEN 'YR' THEN DECIMALTOTALDIGITS + 4 -- YEAR
ELSE 0
END;
END getTypeLenCode;
索引表下标串长度不能超过4096 ,建议把oracle中原始的,完整的包定义发出来看看
长度超过4096就会报错,检查下索引表的定义
您提供的包体里面缺乏依赖对象,用方法简单确认,没有发现同类问题,可能不好排查;
这个有可能找到项目组对口的小伙伴解决下么?或者能提供下依赖对象(就是完整的问题过程ddl,含依赖哪些,我们一起快速定位下。)
问题验证中,请耐心等待。