[firebase-br] Problema com um cursor dentro do outro e CONCATENACAO

Paulo Veiga pjfveiga em gmail.com
Qui Out 25 06:44:24 -03 2007


tenho muito pouca experiencia, mas já experimentou inicializar DEPS=''
, pode ser que esta tenha o valor null.



On 10/24/07, Danilo Gomes <danrgomes em gmail.com> wrote:
> Olá tudo bem ...
>
>   Estou trabalhando com um cursor dentro do outro, pois tive problemas com o
> mestre detalhe no FAST REPORT( não esta aparecendo todos os dados D5). Assim
> resolvi criar este cursor concatendo os nomes dos dependentes. A ideia é a
> seguinte:
>
>      A primeira linha do cursor é carregada e depois com base no
> cd_cliente e na filial ele pega os registros dos dependentes, ai a ideia é
> vai no primeiro registro do dependente e atribui a variavel dependentes,
> depois vai no segundo registro do dependentes e CONCATENA o segundo registro
> com a variavel dependentes,
>     Depois de lido todos os registros da tabela de dependetes(2º cursor) ele
> da um SUSPEND e retorna a variavel dependentes (2º cursor) e todas as outra
> do 1º cursor  e passa para o proximo registro do 1º cursor ...
>
>     Problema ==> A variavel dependentes sai em branco .......
>
>     Desde já agradeço pela atenção .... Danilo
>
>    Eis o monstro
>
>
> CREATE PROCEDURE LISTA_ADIMPLENTES(
>     PDTI DATE,
>     PDTF DATE)
> RETURNS (
>     CD_CLIENTE INTEGER,
>     NUMERO INTEGER,
>     FILIAL INTEGER,
>     NUM_DOC VARCHAR(14),
>     EMISSAO DATE,
>     VENCTO DATE,
>     PAGTO DATE,
>     VALOR NUMERIC(15,2),
>     VALOR_PAGO NUMERIC(15,2),
>     BAIXA DATE,
>     BOLETO NUMERIC(12,1),
>     PARCELA INTEGER,
>     TIPO VARCHAR(1),
>     NOME VARCHAR(60),
>     CIDADE VARCHAR(30),
>     REPRESENTANTE VARCHAR(20),
>     DEPENDENTES VARCHAR(500))
> AS
> declare variable DEP VARCHAR(50);
> declare variable DEPS VARCHAR(500);
> declare variable PCD_CLIENTE INTEGER;
> declare variable PFILIAL INTEGER;
> declare variable CONTA INTEGER;
> begin
> CONTA = 1;
> for
>   SELECT
>        t16.cd_cliente,
>        T16.numero,
>        T16.filial,
>        T16.num_doc,
>        T16.emissao,
>        T16.vencimento,
>        T16.pagto,
>        T16.valor,
>        T16.valor_pago,
>        T16.baixa,
>        T16.nbloq,
>        T16.parcela,
>        t16.tipo,
>        T01.razao,
>        T01.cidade,
>        T21.representante
> FROM t16_contas_receber T16
> LEFT JOIN t01_clientes T01 ON (T01.cd_cliente = T16.cd_cliente and
> t01.filial = t16.filial)
> LEFT JOIN t21_venda_plano T21 ON (T16.pedido_numero = T21.cd_venda AND
> T16.pedido_filial = T21.filial)
> WHERE T16.ativo = 'A' AND T16.valor_pago IS NOT NULL AND t16.vencimento >
> :pDTi and t16.vencimento < :pDTf
> ORDER BY T01.razao
> INTO
>     :PCD_CLIENTE,
>     :NUMERO ,
>     :PFILIAL ,
>     :NUM_DOC,
>     :EMISSAO,
>     :VENCTO,
>     :PAGTO,
>     :VALOR,
>     :VALOR_PAGO,
>     :BAIXA ,
>     :BOLETO,
>     :PARCELA,
>     :TIPO,
>     :NOME,
>     :CIDADE,
>     :REPRESENTANTE
> DO
>  BEGIN
>   FOR SELECT
>   T0101.NOME
>   FROM T0101_DEPENDENTES T0101
>   WHERE ((T0101.CD_CLIENTE = :PCD_CLIENTE) AND (T0101.FILIAL =  :PFILIAL))
>   INTO
>     :DEP
>   DO
>   BEGIN
>
> /*    aqui mora o problema   */
>
>
> /*    if (DEP IS NOT NULL)  then*/
>      BEGIN
>            DEPS= COALESCE (DEPS  || '' || DEP, DEPS);
>        /*    DEPS = DEPS  || '' || DEP;*/
>            DEPENDENTES = DEPS;
>            DEP = '';
> /*           CONTA = CONTA + 1;*/
>      END
> /*     CONTA = CONTA + 1;*/
>
>
>
>   END
>   PCD_CLIENTE =0;
>   PFILIAL =0;
>   CONTA = 1;
>   suspend;
>  END
>
> end
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>




Mais detalhes sobre a lista de discussão lista