尝试使用 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 语句

ORA-00932不一致的数据类型预期 char 得到数字

我在做查询的plsql查询的时候报错 ora -01722错误,下面是我的查询语句

Oracle查询错误分析 ORA-01791 不是SELECTed表达式

数据库查询语句报错-ORA-00911: invalid character