Oracle SQL:使用具有用户定义类型的LAG函数返回“不一致的数据
发布时间:2020-12-12 13:11:54 所属栏目:百科 来源:网络整理
导读:我有一个MyType类型定义如下: create or replace type MyType as varray(20000) of number(18); 表MyTable定义如下: create table MyTable ( id number(18) primary key,widgets MyType) 我试图使用以下SQL为MyTable中的每一行及其逻辑上前一行选择小部件
我有一个MyType类型定义如下:
create or replace type MyType as varray(20000) of number(18); 表MyTable定义如下: create table MyTable ( id number(18) primary key,widgets MyType ) 我试图使用以下SQL为MyTable中的每一行及其逻辑上前一行选择小部件: select t.id,lag(t.widgets,1) over (order by t.id) as widgets_previous from MyTable t order by t.id; 我收到了回复: ORA-00932: inconsistent datatypes: expected - got MYSCHEMA.MYTYPE 如果我使用varchar或number类型的列而不是MyType运行完全相同的查询,它可以正常工作. 当前行及其上一行中的列类型必须相同,因此我只能假设它与用户定义的类型相关. 我是否需要做一些特殊的事情来使用具有用户定义类型的LAG,或者LAG是否不支持用户定义的类型?如果是后者,是否有任何其他实用功能可以提供相同的功能,或者我需要做一个传统的自联接以实现相同的功能? 阅读完所有内容后,我选择了以下作为实现我需要的最有效方法: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 即.滞后/自连接混合使用滞后数字字段,它不会抱怨识别连接条件.我认为它相当整洁,我可以根据需要获得我的收藏品.感谢大家提供的非常有用的输入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |