【发布时间】:2017-05-04 23:50:47
【问题描述】:
我继承了一个带有旧 Oracle 数据库的项目,该数据库的表包含自定义数据类型列:
CREATE TABLE JOB_DOWNLOAD (
JOBID NUMBER(8) NOT NULL,
MSGHEADER MSGHEADERTYPE, --Custom DataType
PAYLOAD PAYLOADLISTTYPE --Custom DataType
);
我可以在表格上运行 SELECT 并仅选择 JOBID 列并获得结果,但是一旦我尝试选择任何自定义 DataType 列,我就会收到错误 ORA-00904: : invalid identifier
我四处搜索,一切都表明这是由于列名无效。我尝试了以下查询,都返回相同的错误消息:
SELECT * FROM JOB_DOWNLOAD
SELECT JOBID, MSGHEADER, PAYLOAD, FROM JOB_DOWNLOAD
SELECT MSGHEADER FROM JOB_DOWNLOAD
SELECT PAYLOAD FROM JOB_DOWNLOAD
SELECT MSGHEADER AS "MessageHead" FROM JOB_DOWNLOAD
我还能做些什么来帮助诊断错误原因吗?
谢谢。
编辑: 自定义类型之一的示例:
CREATE type msgheadertype as object
( destination destinationtype
, org varchar2(20)
)
编辑2:
我看了PAYLOADLISTTYPE,还是有点不一样:
CREATE type payloadlisttype as table of transactiontype
然后transactiontype:
CREATE TYPE transactiontype as object
( header headertype
, data datatype
)
headertype 和 datatype 然后也嵌套自定义数据类型,其中嵌套自定义类型,自定义数据类型向下 7 层,如果有区别的话
编辑3:
查询 ALL_OBJECTS 以获得顶级数据类型返回:
OBJECT_NAME, OBJECT_TYPE, STATUS
----------------------------------
MSGHEADERTYPE, TYPE, VALID
MSGHEADERTYPE, SYNONYM, VALID
PAYLOADLISTTYPE, TYPE, VALID
我只针对顶级数据类型运行此操作,是否需要在所有级别执行此操作?
【问题讨论】:
-
我建议您首先检查这些数据类型在数据库中是否有效。然后,在此处提供这些数据类型结构,以便我们提供任何帮助。
-
@JorgeCampos 我添加了一种数据类型。我不是 Oracle 专家,能否提供一个如何检查数据类型是否有效的示例?
-
类似于:
select object_name, object_type, status from user_objects where OBJECT_NAME = 'MSGHEADERTYPE' -
@JorgeCampos 我运行了脚本,它没有返回任何记录,我也在没有
where的情况下运行它来尝试查看是否有任何记录,但它也没有返回任何结果。