执行 BULK COLLECT 时出现 ORA-00932
ORA-00932 while executing into BULK COLLECT
我收到错误: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的那一行。
有什么线索吗?谢谢!
发生这种情况是因为 Oracle 试图将 4 个数字(id、import1_id、import2_id、prod_id)放入一个结果列但失败了。
为了解决这个问题,您需要明确告诉数据库如何将这 4 个数字转换为一个对象。幸运的是它只需要更改第一行,查询部分的第一行:
sqlCommand :=
'SELECT IMPORT_R(ID, IMPORT1_ID, IMPORT2_ID, PROD_ID)
一切都会好起来的
(我不知道为什么 ORA 消息在这种情况下如此不清楚)
我收到错误: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的那一行。 有什么线索吗?谢谢!
发生这种情况是因为 Oracle 试图将 4 个数字(id、import1_id、import2_id、prod_id)放入一个结果列但失败了。
为了解决这个问题,您需要明确告诉数据库如何将这 4 个数字转换为一个对象。幸运的是它只需要更改第一行,查询部分的第一行:
sqlCommand :=
'SELECT IMPORT_R(ID, IMPORT1_ID, IMPORT2_ID, PROD_ID)
一切都会好起来的
(我不知道为什么 ORA 消息在这种情况下如此不清楚)