Sql com Concatenção

Firebird

09/05/2013

Olá,

Estou tentando concatenar o resultado de um union da seguinte maneira:

SELECT ID_VENDEDOR, CLIENTE ID_FILT, CLIENTE AK1, COD_PRODUTO AK2, NOME_EMP || ASCII_CHAR(59)|| COD_PRODUTO || ASCII_CHAR(59)|| DESCR_PRODUTO || ASCII_CHAR(59)|| SUM (QTD) VALOR FROM (SELECT ERP_PEDIDO.ID_VENDEDOR ID_VENDEDOR, ERP_PEDIDO.ID_EMPRESA CLIENTE,
   ERP_PEDIDO_PRODUTO.ID_PRODUTO COD_PRODUTO,
   ERP_PRODUTO.NOME DESCR_PRODUTO, -SUM (ERP_PEDIDO_PRODUTO.QUANTIDADE) QTD,
   CRM_EMPRESA.NOME NOME_EMP, CRM_EMPRESA.EMPRESA_ID COD_EMP
 FROM ERP_PEDIDO

 JOIN ERP_PEDIDO_PRODUTO on (ERP_PEDIDO.PEDIDO_ID = ERP_PEDIDO_PRODUTO.ID_PEDIDO)
 JOIN ERP_PRODUTO on (ERP_PRODUTO.PRODUTO_ID =  ERP_PEDIDO_PRODUTO.ID_PRODUTO)
 JOIN CRM_EMPRESA ON (ERP_PEDIDO.ID_EMPRESA = CRM_EMPRESA.EMPRESA_ID)
 WHERE
 ERP_PEDIDO.ID_TPPEDIDOSTATUS = 20 AND
 ERP_PEDIDO.DATA_FAT >= CURRENT_DATE-3  AND ERP_PEDIDO.DATA_FAT < CURRENT_DATE
 AND (CRM_EMPRESA.NOME IS NOT NULL OR CRM_EMPRESA.NOME <> '')
 GROUP BY  ERP_PEDIDO.ID_VENDEDOR, ERP_PEDIDO.ID_EMPRESA, ERP_PEDIDO_PRODUTO.ID_PRODUTO, ERP_PRODUTO.NOME, CRM_EMPRESA.NOME, CRM_EMPRESA.EMPRESA_ID

 UNION ALL
 SELECT ERP_PEDIDO_ELE.ID_VENDEDOR ID_VENDEDOR,  ERP_PEDIDO_ELE.ID_EMPRESA CLIENTE,
   ERP_PEDIDO_PRODUTO_ELE.ID_PRODUTO COD_PRODUTO,
   ERP_PRODUTO.NOME DESCR_PRODUTO, SUM (ERP_PEDIDO_PRODUTO_ELE.QUANTIDADE)QTD,
   CRM_EMPRESA.NOME NOME_EMP, CRM_EMPRESA.EMPRESA_ID COD_EMP
 FROM ERP_PEDIDO_ELE
 JOIN ERP_PEDIDO_PRODUTO_ELE on (ERP_PEDIDO_ELE.PEDIDOELE_ID = ERP_PEDIDO_PRODUTO_ELE.ID_PEDIDOELE)
 JOIN ERP_PRODUTO on (ERP_PRODUTO.PRODUTO_ID =  ERP_PEDIDO_PRODUTO_ELE.ID_PRODUTO)
        JOIN CRM_EMPRESA ON (ERP_PEDIDO_ELE.ID_EMPRESA = CRM_EMPRESA.EMPRESA_ID)
 WHERE
 ERP_PEDIDO_ELE.DATA >= CURRENT_DATE-3  AND ERP_PEDIDO_ELE.DATA < CURRENT_DATE
 AND (CRM_EMPRESA.NOME IS NOT NULL OR CRM_EMPRESA.NOME <> '')
 GROUP BY  ERP_PEDIDO_ELE.ID_VENDEDOR, ERP_PEDIDO_ELE.ID_EMPRESA, ERP_PEDIDO_PRODUTO_ELE.ID_PRODUTO, ERP_PRODUTO.NOME, CRM_EMPRESA.NOME, CRM_EMPRESA.EMPRESA_ID
 ) A
 GROUP BY ID_VENDEDOR,  CLIENTE,COD_PRODUTO,DESCR_PRODUTO,QTD, COD_EMP, NOME_EMP
        HAVING SUM (QTD) > 0


Quando eu tento concatenar da meneira que esta no inicio do sql é retornado um erro (MEMO), quando eu retiro o campo NOME_EMP da concatenação dá certo.

Obs.: os dados retornados da consulta não excedem o limite máximo permitido de 255 caracteres.

Ficarei feliz com a ajudade vcs.

Obrigado pela atenção.
Leandro Medeiros

Leandro Medeiros

Curtidas 0

Respostas

Leandro Medeiros

Leandro Medeiros

09/05/2013

O problema é que o firebird soma o tamanho definido para cada coluna que origina os dados para concatenação. Isso pode fazer com que se ultrapasse o limite máximo de caracteres para concatenação, pois se vc tiver, por exemplo, 2 colunas com tamanho e tipo definido como varchar(max), é bem possível que os caracteres concatenados dessas colunas somem mais do que os 256 caracteres permitidos para concatenações.
GOSTEI 0
POSTAR