Oracle SQL:从替换变量创建虚拟 table

Oracle SQL: create a dumy table from a substitution variable

在 Oracle SQL 中,由于下面显示的代码,我可以创建一个虚拟 table:

select crca.*
from my_real_table real_table, 
     table(ntde.ENCRYPT_ALL(:inputParam)) enc
where
    ...

我希望能够在不使用 ntde.ENCRYPT_ALL 的情况下做同样的事情,我想做类似的事情:

select crca.*
from my_real_table real_table, 
     table(:inputParam) enc
where
    ...

它不起作用,我收到此错误:

  1. 00000 - "cannot access rows from a non-nested table item"
    *Cause: attempt to access rows of an item whose type is not known at
    parse time or that is not of a nested table type
    *Action: use CAST to cast the item to a nested table type

请问你知道怎么做吗?

如异常所说,使用CAST:

SELECT c.*
FROM   my_real_table r 
       CROSS JOIN TABLE( CAST(:inputParam AS your_collection_type) ) c

这假设:

  • 绑定变量包含一个集合(而不是字符串);和

  • 正在从应用程序传递绑定变量(这是一个 );和

  • 您已经创建了一个 SQL 集合类型来将绑定变量转换为。例如:

    CREATE TYPE your_collection_type AS TABLE OF NUMBER;
    

    或者,您可以使用内置集合(或 VARRAY),例如 SYS.ODCIVARCHAR2LIST.

    ,而不是创建您自己的集合类型