尝试使用 select 语句查询数据得到 ORA-22905:无法访问非嵌套表项中的行
Posted
技术标签:
【中文标题】尝试使用 select 语句查询数据得到 ORA-22905:无法访问非嵌套表项中的行【英文标题】:Trying to query data using select statement getting ORA-22905: cannot access rows from a non-nested table item 【发布时间】:2018-02-21 12:06:47 【问题描述】:我正在使用包“EXCELTABLE”从 excel 文件中读取数据,我使用的查询运行良好,但问题是每当我尝试在存储过程的 for 循环中使用相同的包时,它都会给我错误作为“ORA-22905:无法访问非嵌套表项中的行”。
下面是我使用的选择查询:-
select ROWNUM "ID","Netzelementtyp","Projekt_ID","Ticket_ID","Netzelement_Nr","Projektart","Statusliste_Status","Statusliste_Ist_Datum","Statusliste_Plan_Datum","Statusliste_Bemerkung" from
(select t."Netzelementtyp",t."Projekt_ID",t."Ticket_ID",t."Netzelement_Nr",t."Projektart",t."Statusliste_Status",t."Statusliste_Ist_Datum",t."Statusliste_Plan_Datum",t."Statusliste_Bemerkung" from table(
EXCELTABLE.GETROWS(
EXCELTABLE.GETFILE('DOC','TicketTracking2.xlsx')
, 'Page1_4'
, ' "Netzelementtyp" number
, "Projekt_ID" number
, "Ticket_ID" varchar2(100)
, "Netzelement_Nr" NUMBER
, "Projektart" varchar2(1000)
, "Statusliste_Status" varchar2(100)
, "Statusliste_Ist_Datum" DATE
, "Statusliste_Plan_Datum" DATE
, "Statusliste_Bemerkung" varchar2(4000)'
, 'A2'
)
) t)
【问题讨论】:
如果我们能看到如何您在存储过程的 for 循环中使用它... edit你的问题,给我们看完整的存储过程代码 我猜这不是他的程序。我在 github ExcelTable 上找到了类似的项目。该项目正在实现 ODCITable 接口,并在执行期间创建结果类型。 (任何日期集,...)。 【参考方案1】:ExcelTable developer says that it's a known issue(参见 cmets),他们提供的解决方法是使用动态 sql:
OPEN my_refcursor FOR 'SELECT ...' USING <bind variables>
您可以阅读有关潜在 ORA-22905 错误on this related question 的更多信息。基本问题是 EXCELTABLE.GETROWS() 返回流水线 ANYDATASET,它不是嵌套表; Oracle 文档将其描述为“不透明类型之一;数据库不知道这些类型的内部结构”。我认为您应该能够使用the ANYDATASET API 访问各个元素,但正如上面的开发人员所建议的那样,使用动态引用光标看起来要简单得多。
【讨论】:
以上是关于尝试使用 select 语句查询数据得到 ORA-22905:无法访问非嵌套表项中的行的主要内容,如果未能解决你的问题,请参考以下文章
仅在案例语句中添加年份得到无效数字错误 - ORA-01722
得到 ORA-00979: 不是没有任何聚合函数的 GROUP BY 语句
我在做查询的plsql查询的时候报错 ora -01722错误,下面是我的查询语句