Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ORA-00932-创建自定义类型的表后数据类型不一致_Oracle_Plsql_Oracle11g - Fatal编程技术网

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_集合)中选择一些_文本、一些_编号

工作得很有魅力。谢谢你的准确回答。