Oracle SQL:使用具有用户定义类型的LAG函数返回"不一致的数据类型"

Pan*_*cho 7 sql oracle function user-defined-types

我有一个MyType类型定义如下:

create or replace type MyType as varray(20000) of number(18);
Run Code Online (Sandbox Code Playgroud)

表MyTable定义如下:

create table MyTable (
   id       number(18) primary key
  ,widgets  MyType
)
Run Code Online (Sandbox Code Playgroud)

我试图使用以下SQL为MyTable中的每一行及其逻辑上前一行选择小部件:

select  t.id
       ,lag(t.widgets,1) over (order by t.id) as widgets_previous
from MyTable t
order by t.id;
Run Code Online (Sandbox Code Playgroud)

我收到了回复:

ORA-00932: inconsistent datatypes: expected - got MYSCHEMA.MYTYPE
Run Code Online (Sandbox Code Playgroud)

如果我使用varchar或number类型的列而不是MyType运行完全相同的查询,它可以正常工作.

当前行中的列类型及其上一行必须相同,因此我只能假设它与用户定义的类型相关.

我是否需要做一些特殊的事情来使用具有用户定义类型的LAG,或者LAG是否不支持用户定义的类型?如果是后者,是否有任何其他实用功能可以提供相同的功能,或者我需要做一个传统的自我联接以实现相同的功能?

Pan*_*cho 2

阅读完上述所有内容后,我选择以下作为实现我需要的最有效的方法:

select curr.id
      ,curr.widgets  as widgets
      ,prev.widgets  as previous_widgets
from (select  a.id                                      
             ,a.widgets
             ,lag(a.id,1) over (order by a.id)  as previous_id
      from mytable a
     ) curr
     left join mytable prev on (prev.id = curr.previous_id)
order by curr.id
Run Code Online (Sandbox Code Playgroud)

IE。滞后/自连接混合在数字字段上使用滞后,它不会抱怨识别连接条件。我认为它相当整洁,我得到了我想要的收藏。感谢大家提供的非常有用的意见。