Como imitar SELECT ... LIMIT, OFFSET no OpenEdge SQL?

É comum na maioria das implementações SQL poder selecionar um subconjunto de "janela deslizante" de todas as linhas retornadas em uma consulta. Um caso de uso comum para isso é paginação. Por exemplo, digamos que eu tenha uma página de pesquisa com 10 resultados em cada página. Para implementações que suportamLIMIT eOFFSET palavras-chave, a consulta usada para retornar resultados para cada página seria a seguinte: a página um usariaSELECT ... LIMIT 10 OFFSET 0, a página 2 usariaSELECT ... LIMIT 10 OFFSET 10, a página 3 usariaSELECT ... LIMIT 10 OFFSET 20, etc. (note que oOFFSET entra em vigor antes doLIMIT).

De qualquer forma, estou tentando imitar essa funcionalidade no mecanismo SQL do OpenEdge. Eu já descobri queSELECT TOP é basicamente equivalente aLIMIT, no entanto não consigo encontrar nada parecido comOFFSET (Eu não acho que há umaexato equivalente). SQL Server e Oracle também carecem deOFFSET, mas eles têm uma pseudocoluna chamadaROWCOUNT eROWNUM, respectivamente, que podem ser usados ​​para imitar o comportamento usando seleções aninhadasAqui eAqui).

NoReferência SQL 10.2B doc, p49 existe uma subseção intituladaCláusula TOP que diz na parte inferior

SELECT TOP é o equivalente funcional do OracleROWNUM funcionalidade. Observe queSELECT TOP é definido simplesmente em termos de um limite no tamanho do conjunto de resultados e o otimizador determina como usar esse limite para melhor acesso aos dados. Portanto,SELECT TOP não tem todas as "regras processuais" usadas para definir o significado do OracleROWNUM frase.

No entanto, isso parece ser impreciso como de acordo comTOPa sintaxe não pode ser usada como um predicado comoROWNUM pode (por exemplo, eu não posso dizerSELECT * FROM Customer WHERE TOP > 5 AND TOP < 10). assimTOP énão funcionalmente equivalente aROWNUM.

Existe alguma maneira de imitarOFFSETou estou sem sorte?

questionAnswers(1)

yourAnswerToTheQuestion