Utilizando FIRST em sub-querys
No informix existe o comando FIRST que é similar ao TOP do SqlServer (até com sintaxe parecida). Este comando limita a quantidade de linhas retornada por um SELECT. Porém ele possui um defeito que ainda não foi implementado pelos desenvolvedores do Informix, que é a sua utilização em sub-querys.
Para contornar o problema utilizo um recurso do Informix que mascara a utilização deste FIRST na sub-query. que é a utilização dos tipos de dados de COLLECTION. Mas para isso é preciso criar uma procedure para tratar este SELECT.
Veja o código de exemplo abaixo:
# Você pode copiar e alterar esta procedure para o modo que melhor # adapte a suas necessidades. CREATE PROCEDURE show_dados( pSet MULTISET(VARCHAR(254) NOT NULL )) RETURNING char(800) ; DEFINE vNome char(20) ; DEFINE vRes varchar(200) ; -- Autor: César Inacio Martins - [www.imartins.com.br/informix] let vRes="" ; let vNome="" ; FOREACH cursor_a FOR SELECT tSet.nome INTO vNome FROM table(pSet) as tSet(nome) ORDER BY 1 LET vRes=TRIM(VRES)||" "||TRIM(vnome); END FOREACH ; RETURN TRIM(vRes) ; END PROCEDURE ; # Observe que você utilizará a função MULTISET e os comandos FIRST e ITEM. SELECT t.tabname , show_dados(MULTISET( SELECT FIRST 1 ITEM colname FROM syscolumns c where c.tabid = t.tabid )) as colname FROM systables t
Este select, no SqlServer seria algo como:
select t.tabname , (select top 1 colname from syscolumns c where c.tabid = t.tabid ) as colname from systables t
- 272 leituras
Tags:





Limitações
Uma limitação, importante e desanimadora nesta solução é que não é possível utilizar um ORDER BY... pois o Informix detecta como se a query estivesse retornando mais de uma linha...
Comentar