2025年DataStage常见错误记录

DataStage常见错误记录Ora 01427 单个子查询返回多个行 select 语句下面嵌套的 select 语句查询结果大于一行 解决方法 将嵌套查询语句加上 where rownum 1 附录有去重语句 ora 01461 仅能绑定要插入 LONG 列的 LONG 值 实际字符长度大于 2000

大家好,我是讯享网,很高兴认识大家。

Ora-01427:

 

单个子查询返回多个行:select语句下面嵌套的select语句查询结果大于一行.

解决方法:将嵌套查询语句加上where rownum=1,附录有去重语句。

ora-01461:

仅能绑定要插入 LONG 列的 LONG 值:实际字符长度大于2000,字段被强转为CLOB。

解决办法:大多数时候是脏数据,处理掉即可。

Ora-01772:

一般是字符型转num型发生错误,

解决方法:新建FN_GETNUM函数(附在文档后),对照目标表,对原表VARCHAR类型、目标表为num类型的列执行该列。

原因二:子查询用到的字段为类型不对

原因三:decode函数使用时,decode(ziduan,1,’A’,2,’B’),此时ziduan为字符型。

Ora-01406:

提取的列值被截断。

解决办法:在视图里面substrb截取字段,或者在JOB里面将该字段放大。

Ora-01400

无法将 NULL 插入 ("GMC"."MDM_GY_BINGRENXX_ETL_TMP"."XINGMING"),有时候设置了where 字段 is not null,还是会有这个报错,有可能是字段是空格,加trim(字段名)就可以。

Ora-01438:ORA-01455:ora-01457

值大于为此列准备的最大精度  转换列溢出整数数据类型

解决办法:目前没有特别好的解决办法,需要排查。一般有两种情况,一是超精度,二是字符转数值时存在非数字字符。

Ora-29275:部分多字节字符

在认为有问题的字段 用 to_nchar("字段")转换

ORA-01858:

在要求输入数字处找到非数字字符:

解决办法:使用GETNUM函数(见附录)

Ora-04045:ora-01600:


讯享网

在正式库里重新编译视图,待容灾库更新后重新同步。

Ora-01555:

一般是由于数据量过大,分批次ETL即可。

ora-04023:

视图失效,重建视图。

Ora-12154:

除了DS连不上,服务器,客户端都能正常连上。

解决方法:写成连接串形式即可。

(DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.2.125)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = sjkhis)

    )

)

cant resolve the proxy

临时文件夹失效,解决方法如下:

cd /home/dsadm/bidw/data/tmp

chmod -R 777 tmp

表对表插入慢

将extended置空

9080端口无效

大多数时候时某个服务掉了,重启即可。

                                                                                                     cannot convert to framework type xx

查看后面的字符,看是哪两个字段进行转换时出了问题。曾经遇到这个问题,是某日期字段里有脏数据,虽然在视图里,在ds里分别设置为date,timestamp,还是报了datetime-string错误。

Replace替换’

方法一:chr(39)

方法二:’’(这里第一个是转义字符,第二个代表引号)

The input schema column HUIYINQK is not used and the connector is configured to stop when unused columns are detected in the input schema.

意为输出列里面有,但是查询里SQL没有HUIYINQK。

解决办法:将该字段添加进去即可。

The record is too big to fit in a block

在参数里面将APT_DEFAULT_TRANSPORT_BLOCK_SIZE放大

主键派生值错误:

输入与输出值之间命名存在冲突。一般是映射里面有字段对应不上。

解决办法:去控件里面查找红色的字段,修改。

遇到目录相关问题,首先检查目录有没有授权。

Unrecognized argument: variant:11g

一般是缺少参数,例如起始日期,时间段等等

CLOB字段的问题

入库改成delete then insert。(此方法有一定危险,不推荐,有其他方法更好)

CLOB字段混淆问题

解决方法:在update语句里面加上如下标红字段。

The connector could not find the specified file:

一般是由于后面有目标库控件中某个选项否被改成了是。

RECEIVED SIGNAL SIGABRT

Removing the NLS map, or setting the array and transaction sizes

to one will eliminate the problem, however this will not be a

valid solution if these values are required

SQLSERVER调试常用函数:

JIESUANRQ between convert(datetime,'#ETL_DATE_A#'+' 00:00:00') AND convert(datetime,'#ETL_DATE_B#'+' 23:59:59')

FASHENGRQ >= convert(datetime,'#$START_TIME#') - #$EXTRACT_DAYS#

MYSQL调试常用函数:

jilusj   >= cast(concat(STR_TO_DATE('#$START_TIME#','%Y-%m-%d %H:%i:%s')) AS DATETIME) - interval '6'  DAY

inp_patient.IP_Admit_Time  BETWEEN cast(concat(STR_TO_DATE('#ETL_DATE_A#','%Y%m%d'),' 00:00:00') AS DATETIME) AND  cast(concat(STR_TO_DATE('#ETL_DATE_B#','%Y%m%d'),' 23:59:59') AS DATETIME)

.so文件的软连接错误

报错查不到该文件。

一般情况下两个问题:1.缺失文件

2.该文件没有权限。

经检查,存在这个文件。那么即文件没有权限。

是用户映射问题。将dsadm等用户映射到root下即可解决问题。

国产数据库调试

解决办法:表名前加上库名

附录

数值函数

create or replace function FN_GETNUM(num in varchar2)

return number AS

NUM_OUT number;

begin

  begin

if num is not NULL then

select to_number(num)

into NUM_OUT

from dual A

where ROWNUM <=1;

else

NUM_OUT:=null;

end if ;

exception

when NO_DATA_FOUND then

begin

NUM_OUT:=null;

end;

when others then

BEGIN

NUM_OUT:=null;

end;

end;

return(NUM_OUT);

end;

/*日期字段不正确的转为空值*/

CREATE OR REPLACE FUNCTION GMC_FN_GETDATE(todate IN VARCHAR2)
RETURN date AS
DATE_OUT date;
BEGIN
BEGIN
IF todate IS NOT NULL THEN
SELECT to_date(todate,'yyyy-mm-dd')
INTO DATE_OUT
FROM dual A
WHERE ROWNUM <= 1 ;
ELSE
DATE_OUT := null;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
DATE_OUT := null;
END;
WHEN others THEN
BEGIN
DATE_OUT := null;
END;
END;
RETURN(DATE_OUT);
END;

/*精度问题*/

select 
max(lengthb(GMC_FN_STRSPLIT(FUKESSSBZ,'.',1))) as ones,--
小数前面的最大位数
max(lengthb(GMC_FN_STRSPLIT(FUKESSSBZ,'.',2))) as twos--小数后面的最大位数
from GMC_V_YCFBJ_CHANQIANSF

--查询字段某字符间隔第几位的字符


CREATE OR REPLACE FUNCTION GMC_FN_STRSPLIT(p_str       IN VARCHAR2,
                       p_delimiter IN VARCHAR2,
                       p_index     in INT) RETURN VARCHAR2 IS
    j         INT := 0;
    i         INT := 1;
    str       VARCHAR2(1000) := p_str;
    resultstr VARCHAR2(1000);
  BEGIN
    WHILE i < p_index + 1 LOOP

      j := INSTR(str, p_delimiter, 1);
      IF j < 1 THEN
        resultstr := str;
        EXIT;
      END IF;
      resultstr := SUBSTR(str, 1, j - 1);
      str       := SUBSTR(str, j + 1);
      i         := i + 1;
    END LOOP;
    if i < p_index then
      resultstr := '';
    end if;

    RETURN resultstr;
  END;

日期函数

CREATE FUNCTION GMC_FN_GETDATE(todate IN VARCHAR2)
RETURN date AS
DATE_OUT date;
BEGIN
BEGIN
IF todate IS NOT NULL THEN
SELECT to_date(todate,'yyyy-mm-dd')
INTO DATE_OUT
FROM dual A
WHERE ROWNUM <= 1 ;
ELSE
DATE_OUT := null;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
DATE_OUT := null;
END;
WHEN others THEN
BEGIN
DATE_OUT := null;
END;
END;
RETURN(DATE_OUT);
END;

/*去重解决*/

delete from 表 a
where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1)
and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

编译无效视图

create or replace procedure compile_invalid_views as
--编译某个用户下的无效视图
str_sql varchar2(200);
begin
for invalid_views in (select object_name from user_objects
where object_name like 'ODS%' or object_name like 'REPORT%' OR object_name LIKE 'BI%')
loop
str_sql := 'alter view '||invalid_views.object_name || ' compile';
begin
execute immediate str_sql;
exception
--When Others Then Null;
when OTHERS Then
dbms_output.put_line(sqlerrm);
end;
end loop;
end;

小讯
上一篇 2025-03-31 18:42
下一篇 2025-03-19 09:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/42709.html