Search code examples
mysqlmariadbprocedure

insert into after CTE, mySql


I'm writing a procedure, using with to generate a table, then make an insert passing the fields of this table as a value, but mysql is returning a syntax error in the insert, does anyone have any idea what it is?

WITH origem AS (
    SELECT
        cnpj,
        MAX(nome_empresa)                          AS nome_empresa,
        SUM(qtd_documentos)                        AS qtd_documentos,
        codigo_uf_emitente,
        MAX(nome_uf_emitente)                      AS nome_uf_emitente,
        codigo_cidade_emitente,
        MAX(nome_cidade_emitente)                  AS nome_cidade_emitente,
        codigo_uf_destinatario,
        MAX(nome_uf_destinatario)                  AS nome_uf_destinatario,
        codigo_cidade_destinatario,
        MAX(nome_cidade_destinatario)              AS nome_cidade_destinatario,
        SUM(qtd_produtos)                          AS qtd_produtos,
        SUM(valor_total_frete)                     AS valor_total_frete,
        SUM(valor_total_nfe)                       AS valor_total_nfe,
        _ano                                       AS ano,
        _mes                                       AS mes
    FROM
        dataset_nfe_transportadoras_diario
    WHERE
        ano     = _ano
        AND mes = _mes
    GROUP BY
        cnpj,
        codigo_uf_emitente,
        codigo_cidade_emitente,
        codigo_uf_destinatario,
        codigo_cidade_destinatario
)
INSERT INTO dataset_nfe_transportadoras_mensal(
    cnpj,
    nome_empresa,
    codigo_uf_emitente,
    nome_uf_emitente,
    codigo_cidade_emitente,
    nome_cidade_emitente,
    codigo_uf_destinatario,
    nome_uf_destinatario,
    codigo_cidade_destinatario,
    nome_cidade_destinatario,
    qtd_documentos,
    qtd_produtos,
    valor_total_nfe,
    valor_total_frete,
    mes,
    ano
)

my sqlcode is it


Solution

  • You must use the CTE as SELECT

    INSERT INTO dataset_nfe_transportadoras_mensal
    WITH origem AS (
        SELECT
            cnpj,
            MAX(nome_empresa)                          AS nome_empresa,
            SUM(qtd_documentos)                        AS qtd_documentos,
            codigo_uf_emitente,
            MAX(nome_uf_emitente)                      AS nome_uf_emitente,
            codigo_cidade_emitente,
            MAX(nome_cidade_emitente)                  AS nome_cidade_emitente,
            codigo_uf_destinatario,
            MAX(nome_uf_destinatario)                  AS nome_uf_destinatario,
            codigo_cidade_destinatario,
            MAX(nome_cidade_destinatario)              AS nome_cidade_destinatario,
            SUM(qtd_produtos)                          AS qtd_produtos,
            SUM(valor_total_frete)                     AS valor_total_frete,
            SUM(valor_total_nfe)                       AS valor_total_nfe,
            _ano                                       AS ano,
            _mes                                       AS mes
        FROM
            dataset_nfe_transportadoras_diario
        WHERE
            ano     = _ano
            AND mes = _mes
        GROUP BY
            cnpj,
            codigo_uf_emitente,
            codigo_cidade_emitente,
            codigo_uf_destinatario,
            codigo_cidade_destinatario
    )
    SELECT 
        cnpj,
        nome_empresa,
        codigo_uf_emitente,
        nome_uf_emitente,
        codigo_cidade_emitente,
        nome_cidade_emitente,
        codigo_uf_destinatario,
        nome_uf_destinatario,
        codigo_cidade_destinatario,
        nome_cidade_destinatario,
        qtd_documentos,
        qtd_produtos,
        valor_total_nfe,
        valor_total_frete,
        mes,
        ano
     FROM origem