Utilizando FIRST em sub-querys

Versão para impressãoEnviar para amigoVersão PDF

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 

2
Média: 2 (1 vote)
Sua avaliação: Nenhum
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

O conteúdo deste campo é privado não será exibido ao público.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Você pode usar tags BBCode no texto.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Mais informações sobre as opções de formatação

CAPTCHA
Este teste é para bloquear programas automatizados e previnir spams
CAPTCHA de Imagem
Digite o texto exibido na imagem.