正在开发远程自动统计的过程,用动态语句,筛选用的变量为转变成VARCHAR2格式的系统日期,遇到统计某一表数字时报错,错误类型为ora-01722:invalid number,ora-02063等,将过程中的变量直接改成常量,运行通过,同一过程中其他表用变量统计正常,后来研究远程数据库表的类型,发现该表COLUMNS里相应字段的histogram属性为height balanced,而其他统计正常的表相应字段的该属性为NONE。
请教,该如何解决此问题。
请教,该如何解决此问题。
而你错误信息ora-01722:invalid number 是说无效的数字,应该是你格式的问题,你贴出你具体的SQL看下呢
IS
JQ NUMBER;
XF NUMBER;
strSQL VARCHAR2 (4000);
strEnd VARCHAR2 (14);
BEGIN
strSQL := 'select to_char(sysdate,''yyyyMMdd'')||''170000'' from dual'; EXECUTE IMMEDIATE strSQL INTO strEnd; strSQL :=
'CREATE TABLE TJ_'
|| SUBSTR (strEnd, 1, 8)
|| '
(
lx VARCHAR2 (255),
jq VARCHAR2 (255),
xf VARCHAR2 (255)
)'; EXECUTE IMMEDIATE strSQL; strSQL :=
'SELECT COUNT(distinct bh) FROM xt_dba.xx@dblink_xt WHERE (rqsj BETWEEN ''20101018'' AND '
|| strEnd
|| ') AND lx =''704'' AND BS != ''4'''; EXECUTE IMMEDIATE strSQL INTO jq; strSQL :=
'select count(distinct jbbh) FROM XT_DBA.jbxx@DBLINK_XT WHERE (sj between ''20101018'' AND '
|| strEnd
|| ') and fg=''01'')'; EXECUTE IMMEDIATE strSQL INTO xf; strSQL :=
'insert into TJ_'
|| SUBSTR (strEnd, 1, 8)
|| ' values(''总计'','
|| jq
|| ','
|| xf
|| ')'; EXECUTE IMMEDIATE strSQL; COMMIT;
END TJ;
xt_dba.xx的rqsj的Histogram为Height Balanced,XT_DBA.jbxx的SJ的Histogram为NONE
看下你表xt_dba.xx@dblink_xt 中的rqsj类型是字串型的吧,格式是什么样的?是否存在非数字的?
还有,你说将过程中变量改成常量,你改的是哪个变量为常量?
我认为是你动态SQL拼接错了,应该这样吧:strSQL :=
'SELECT COUNT(distinct bh) FROM xt_dba.xx@dblink_xt WHERE (rqsj BETWEEN ''20101018'' AND '''||strEnd||''') AND lx =''704'' AND BS != ''4''';
抓取回来的数据的Histogram为NONE,统计正常。
dbms_output.put_line(strSQL);