Sql com Concatenção
Olá,
Estou tentando concatenar o resultado de um union da seguinte maneira:
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.
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) > 0Quando 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
Curtidas 0
Respostas
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