ORA-00932 在执行 BULK COLLECT 时
Posted
技术标签:
【中文标题】ORA-00932 在执行 BULK COLLECT 时【英文标题】:ORA-00932 while executing into BULK COLLECT 【发布时间】:2021-11-24 12:43:48 【问题描述】:我收到错误:ORA-00932:inconsistent datatypes: expected - got -
。
没有什么类型不一致的信息。我只看到-。有没有办法检查它?
下面的代码被简化了:
create type IMPORT_R as object (
ID int,
IMPORT1_ID int,
IMPORT2_ID int,
PROD_ID int
);
create type IMPORT_T as table of IMPORT_R;
CREATE FUNCTION GetImport(
id IN BINARY_INTEGER,
id2 IN BINARY_INTEGER,
id3 IN BINARY_INTEGER)
return IMPORT_T
IS
sqlCommand VARCHAR2(32000);
v_Result IMPORT_T;
begin
sqlCommand :=
'SELECT ID, IMPORT1_ID, IMPORT2_ID, PROD_ID
FROM
(
SELECT ID,
IMPORT1_ID,
-1 AS IMPORT2_ID,
PROD_ID
FROM TABLE1
WHERE IMPORT1> '|| id1;
IF id := 123 THEN
sqlCommand := sqlCommand||
'UNION
SELECT ID,
-1 AS IMPORT1_ID,
IMPORT2_ID,
PROD_ID
FROM TABLE2
WHERE IMPORT2> '|| id2;
END IF;
sqlCommand := sqlCommand||')' ;
EXECUTE IMMEDIATE sqlCommand BULK COLLECT INTO v_Result;
return v_Result;
end;
错误发生在执行 EXECUTE IMMEDIATE 的行。 有什么线索吗?谢谢!
【问题讨论】:
【参考方案1】:发生这种情况是因为 Oracle 尝试将 4 个数字(id、import1_id、import2_id、prod_id)放入一个结果列但失败了。
为了解决这个问题,您需要明确告诉数据库如何将这 4 个数字转换为对象。好在只需要修改第一行,查询部分的第一行:
sqlCommand :=
'SELECT IMPORT_R(ID, IMPORT1_ID, IMPORT2_ID, PROD_ID)
一切都会好起来的
(我不知道为什么在这种情况下 ORA 消息如此不清楚)
【讨论】:
谢谢!更改了它,但现在我得到:`不一致的数据类型:预期的 UDT 得到了 NUMBER。` @hajduk 你是把它改成“SELECT IMPORT_T..”还是“SELECT IMPORT_R...)?指定IMPORT_T时会出现这个错误 确实!非常感谢!!以上是关于ORA-00932 在执行 BULK COLLECT 时的主要内容,如果未能解决你的问题,请参考以下文章
Oracle:在 UNION 语句 ORA-00932 中,clob 列与自身不一致
ORA-00932 数据类型不一致: 应为 -, 但却获得 -
ORA-00932: 不一致的数据类型: 预期 - 得到 CLOB
ORA-00932: inconsistent datatypes: expected - got NCLOBORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 解决办法
ORA-00932: inconsistent datatypes: expected - got NCLOBORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 解决办法