【发布时间】:2010-08-18 09:28:36
【问题描述】:
我有以下功能:
create or replace
FUNCTION "MXUPGKEYVAL"(tbname varchar2,colname varchar2) return number is
val number;
BEGIN
EXECUTE IMMEDIATE
'select sum(length('||colname||')) from '||tbname into val;
return val;
END;
以及以下更新:
update ANINTEGDATA set val1=to_char(nvl(MXUPGKEYVAL(MX5T,MX5C),0)) where type=1;
当我执行更新时,我得到:
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
ORA-06512: at "MAXIMO.MXUPGKEYVAL", line 6
ORA-06512: at line 2
知道为什么会这样吗?
问候, 拉杜。
后期编辑:
表 ANINTEGDATA 是:
create table ANINTEGDATA
(
MX5T VARCHAR2(50),
MX5C VARCHAR2(50),
MX6T VARCHAR2(50),
MX6C VARCHAR2(50),
TYPE NUMBER,
VAL1 VARCHAR2(200),
VAL2 VARCHAR2(200)
);
【问题讨论】:
-
您好 Radu,如果您不给我们一些示例数据和该表的列数据类型,我们无法给您正确答案:
ANINTEGDATA(val1,type,MX5T,MX5C)。 -
嗨文森特。谢谢您的答复。我添加了 ANINTEGDATA 表的数据类型。该表现在包含 MX5T、MX5C 和类型字段的值。 MX5T 和 MX5C 字段包含同一架构上各种表的表名和列名。
-
MXUPGKEYVAL 的第一个参数显然应该是一个表名,在这个例子中这个参数被给出为'MX5T'(我相信这应该用引号括起来)。有 MX5T 表吗?这也是 ANINTEGDATA 上的列名。如果有 MX5T 表,您能否发布该表的定义?如果不是,请检查上面显示的函数定义是否是最新的。如上所示,我已经创建了 ANINTEGDATA 表和 MXUPGKEYVAL 函数,但出现的错误与您收到的错误不同。谢谢。