ORA-00932 - 创建自定义类型表后的数据类型不一致

时间:2016-07-05 16:48:43

标签: oracle plsql oracle11g

我正在开发一个返回两列结果的查询:VARCHAR(256)NUMBER。为了存储查询结果以供将来使用,我创建了以下类型:

-- An object representing each of the records of my query
create or replace TYPE TP_SOME_TYPE IS OBJECT(
    SOME_TEXT VARCHAR2(256), 
    SOME_NUMBER NUMBER
);

-- A table of the objects created above:
create or replace TYPE TP_SOME_TABLE AS TABLE OF TP_SOME_TYPE;

最后,我运行了一个示例SQL,尝试在TP_SOME_TABLE类型的变量中收集结果:

DECLARE
    SOME_RESULT TP_SOME_TABLE;
BEGIN
    EXECUTE IMMEDIATE 'SELECT ''TEXT'' AS SOME_TEXT, 1 AS SOME_NUMBER FROM DUAL'
    BULK COLLECT INTO SOME_RESULT;
END;

并收到以下错误消息:

ORA-00932: tipos de dados inconsistentes: esperava - obteve -
ORA-06512: em line 4
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

我尝试使用相同的字段在我的函数体上定义RECORD TYPE而不是OBJECT TYPE,但不幸的是,因为我要揭露收集的内容导致TABLE()调用,我必须使用像OBJECT这样的数据库级别。

任何使当前结构有效的想法?

我的数据库设置:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE   11.2.0.4.0  Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

提前致谢。

2 个答案:

答案 0 :(得分:5)

必须显式构造对象。将测试中的查询更改为:

EXECUTE IMMEDIATE 'SELECT tp_some_type(''TEXT'', 1) FROM DUAL'

答案 1 :(得分:0)

您要转换隐藏在TP_SOME_TYPE类型的select语句中引用的列。

Tue Jul 05 2016 02:46:43 PM

你仍然可以像访问这个集合一样 从表(ur_collection)中选择SOME_TEXT,SOME_NUMBER;