Segue esquema geral simplificado de procedure Informix que retorna um recorde set:

(não esqueça que no Informix os identificadores podem ter no máximo 18 caracteres):

Create procedure sp_ReturnRecordSet(P1  <datatype>,  P2   <datatype>, …, PN  <datatype>)

    returning    <datatype1>,  <datatype2>, ...,  <datatypeM>;

 

define l_INTO_1      <datatype>;

define l_INTO_2      <datatype>;

define l_INTO_M      <datatype>;

 

foreach cursor1 with hold for

    Select …Into l_INTO_1, l_INTO_2, …, l_INTO_M

    From … Where …

    return l_INTO_1, l_INTO_2, …, l_INTO_M with resume;

end foreach

 

End procedure;

 

Se você tiver mais de uma consulta, terá de montar foreach’s independentes, mas desde que, é claro,

os dados retornados mantenham compatibilidade com a qtde e tipos de dados declarados na cláusula

returning.

 

Já no SQLWindows/Centura você a executa fazendo basicamente o seguinte:

1. SqlRetrieve(SQLHandle, "sp_ReturnRecordSet",":w_P1,w_P2,...,wPN","w_INTO_Ret1,w_INTO_Ret2,...,w_INTO_RetM")

2. SqlExecute(SQLHandle)

3. While SqlFetchNext(SQLHandle, l_n_Fetch)

               

                As variáveis: w_INTO_Ret1,w_INTO_Ret2,...,w_INTO_RetM

                terão os dados de cada membro do select em cada iteração.

               

 

Sds,

F.L.

 

-----Mensagem original-----
De: owner[EMAIL PROTECTED]net [mailto:[EMAIL PROTECTED] Em nome de rlarizzatti
Enviada em: terça-feira, 3 de maio de 2005 11:32
Para: sqlwin
Assunto: Re:RES: [sqlwin] Ajuda com informix

 

Agradeço a ajuda de todos, mas ainda não consegui resolver o problema de sintaxe.

Tentei criar um comando select dentro de cada if, iniciando com o foreach e terminando com o return pn_......

end foreach;

mas por algum motivo que não consigo descobrir, continua dando erro de sintaxe.

Se alguém puder me ajudar, me mandando algumas sintaxes de informix, esquema de if, cursores, exception, etc... enfim, de tudo um pouco, ficarei muito grato, pois não conheço a linguagem e estrutura procedural do informix.......

 

Mais uma vez, grato a todos pela boa vontade.

 

---------- Início da mensagem original -----------

De: owner[EMAIL PROTECTED]net

Para: [EMAIL PROTECTED]net

Cc:

Data: Mon, 2 May 2005 20:08:37 -0300

Assunto: RES: [sqlwin] Ajuda com informix

> Ja faz alguns anos que não trabalho com Informix, mas numa das aplicações

> que desenvolvi com Informix eu tinha um caso parecido com isto e resolvemos

> criando um cursor para os diversos Select´s, sendo o nome do cursor era

> sempre o mesmo e depois era so executar sem problemas.

>

> Abçs

> -----Mensagem original-----

> De: owner[EMAIL PROTECTED]net [mailto:[EMAIL PROTECTED]

> nome de Fabio Lopes

> Enviada em: segunda-feira, 2 de maio de 2005 19:14

> Para: [EMAIL PROTECTED]net

> Assunto: RES: [sqlwin] Ajuda com informix

>

>

> Olá.

>

>

>

> Não é possível montar dinamicamente um comando numa procedure, pois seu

> código é pré-compilado.

>

> No fluxo do código você tem de ter todas (se isso for possível) as

> variações pré-estabelecidas:

>

>

>

> If QuerExecutarCmd1 then

>

> Select ... from ... where ...

>

> Else

>

> Select ... from ... where ...

>

> End if;

>

>

>

> Sds,

>

> F.L.

>

>

>

> -----Mensagem original-----

> De: owner[EMAIL PROTECTED]net [mailto:[EMAIL PROTECTED] Em

> nome de rlarizzatti

> Enviada em: segunda-feira, 2 de maio de 2005 16:20

> Para: sqlwin

> Assunto: Re:[sqlwin] Ajuda com informix

>

>

>

> Pessoal,

>

>

>

> Estou desenvolvendo uma procedure em informix que gera comandos de select

> dinâmicos. Está com erro de sintaxe, e não sei qual seria o problema.

>

> É mais ou menos o seguinte, dependendo de alguns parâmetros que a

> procedure receba, o select terá aguns campos, tabelas e cláusulas where.

> Faço isso através de 'if' e seto os valores para para variáveis sSelect,

> sFrom, sInto e sWhere.

>

> Por algum motivo, está com erro de sintaxe.

>

> Será que alguém teria um script que faça algo parecido, e que possa me

> enviar para me ajudar?

>

>

>

> Agradeço qualquer ajuda.

>

>

>

> Abraço a todos

>

Responder a