Oracle ORA-00932-创建自定义类型的表后数据类型不一致
我正在开发一个查询,结果返回两列:Oracle ORA-00932-创建自定义类型的表后数据类型不一致,oracle,plsql,oracle11g,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
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\u SOME\u 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:
我曾尝试在具有相同字段的函数体上定义一个记录类型
,而不是对象类型
,但它成功了,不幸的是,由于我将在表()调用中公开收集的结果,我必须使用类似对象
的数据库级别
有什么想法可以让目前的结构发挥作用吗
我的数据库设置:
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
提前感谢。必须显式构造对象。将测试中的查询更改为:
EXECUTE IMMEDIATE 'SELECT tp_some_type(''TEXT'', 1) FROM DUAL'
您需要将转换转换为TP_SOME_类型的select语句中引用的列
DECLARE
SOME_RESULT TP_SOME_TABLE;
BEGIN
EXECUTE IMMEDIATE 'SELECT TP_SOME_TYPE(''TEXT'' , 1) FROM DUAL'
BULK COLLECT INTO SOME_RESULT;
END;
您仍然可以像这样访问此集合
从表格(ur_集合)中选择一些_文本、一些_编号 工作得很有魅力。谢谢你的准确回答。