[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