[firebase-br] Problema com um cursor dentro do outro e CONCATENACAO
Danilo Gomes
danrgomes em gmail.com
Qua Out 24 17:32:49 -03 2007
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
Mais detalhes sobre a lista de discussão lista