Pular para o conteúdo

Fóruns SQL e PL/SQL Não consigo retornar os registros Não consigo retornar os registros

#102823
Anônimo

    @Thunder_Catz

    Tentei fazer o que você disse mas obtive outro erro: PLS-00103: Encontrado o símbolo “SELECT”.

    CREATE TABLE tabelaFinal (
    DT_INICIO_VIGENCIA date,
    DT_FIM_VIGENCIA date,
    TX_UNIDADE VARCHAR2(20 BYTE),
    TX_TRM VARCHAR2(20 BYTE),
    TX_TP_INTERVENCAO VARCHAR2(100 BYTE),
    TX_SERIE VARCHAR2(20 BYTE),
    TX_LOCAL_ESPECIFICO VARCHAR2(200 BYTE),
    TX_COMPOSICAO VARCHAR2(20 BYTE),
    TX_AREA_MANUTENCAO VARCHAR2(200 BYTE)
    );

    CREATE GLOBAL TEMPORARY TABLE tabelaTemporaria (
    DT_INICIO_VIGENCIA date,
    DT_FIM_VIGENCIA date,
    TX_UNIDADE VARCHAR2(20 BYTE),
    TX_TRM VARCHAR2(20 BYTE),
    TX_TP_INTERVENCAO VARCHAR2(100 BYTE),
    TX_SERIE VARCHAR2(20 BYTE),
    TX_LOCAL_ESPECIFICO VARCHAR2(200 BYTE),
    TX_COMPOSICAO VARCHAR2(20 BYTE),
    TX_AREA_MANUTENCAO VARCHAR2(200 BYTE)
    ) ON COMMIT DELETE ROWS;

    insert into tabelaTemporaria
    SELECT DISTINCT LRA.DT_INICIO_VIGENCIA,
    LRA.DT_FIM_VIGENCIA ,
    MVCSL.TX_UNIDADE ,
    MVUL.TX_TRM ,
    SVTI.TX_TP_INTERVENCAO ,
    MVCSL.TX_SERIE ,
    LLE.TX_LOCAL_ESPECIFICO ,
    MVTL.TX_COMPOSICAO ,
    LAM.TX_AREA_MANUTENCAO
    FROM
    (SELECT ID_LOCAL_ESPECIFICO,
    ID_AREA_MANUTENCAO ,
    DT_INICIO_VIGENCIA ,
    DT_FIM_VIGENCIA ,
    CD_COMPOSICAO ,
    CD_TRM ,
    CD_UNIDADE ,
    ID_TIPO_INTERVENCAO ,
    ID_LINHA ,
    ID_SERVICO ,
    CD_TIPO_OPERACAO
    FROM LMR_RESERVA_ALOCACAO
    UNION
    SELECT ID_LOCAL_ESPECIFICO,
    ID_AREA_MANUTENCAO ,
    DT_INICIO_VIGENCIA ,
    DT_FIM_VIGENCIA ,
    CD_COMPOSICAO ,
    CD_TRM ,
    CD_UNIDADE ,
    ID_TIPO_INTERVENCAO ,
    ID_LINHA ,
    ID_SERVICO ,
    CD_TIPO_OPERACAO
    FROM LMR_RESERVA_ALOCACAO_HIST
    ) LRA
    LEFT JOIN LMR_LOCAL_ESPECIFICO LLE
    ON LLE.ID_LOCAL_ESPECIFICO = LRA.ID_LOCAL_ESPECIFICO
    LEFT JOIN LMR_AREA_MANUTENCAO LAM
    ON LAM.ID_AREA_MANUTENCAO = LLE.ID_AREA_MANUTENCAO
    LEFT JOIN MTR_VW_TREM_LMR MVTL
    ON LRA.CD_COMPOSICAO = MVTL.CD_COMPOSICAO
    LEFT JOIN MTR_VW_UE_LMR MVUL
    ON LRA.CD_TRM = MVUL.CD_TRM
    LEFT JOIN MTR_VW_CARROS_SERIE_LMR MVCSL
    ON LRA.CD_UNIDADE = MVCSL.CD_UNIDADE
    LEFT JOIN SIC_VW_TP_INTERVENCAO_LMR SVTI
    ON LRA.ID_TIPO_INTERVENCAO = SVTI.ID_TIPO_INTERVENCAO
    LEFT JOIN CTC_VW_TCO_LINHASERVICO_LMR CVTL
    ON LRA.ID_LINHA = CVTL.ID_LINHA
    OR LRA.ID_SERVICO = CVTL.ID_SERVICO
    WHERE 1=1
    AND LRA.CD_TIPO_OPERACAO = ‘A’
    AND LLE.ID_PARQUE_MANUTENCAO = 1
    AND LRA.ID_AREA_MANUTENCAO = 19
    AND ((LRA.DT_INICIO_VIGENCIA >= ’01/02/2012′ AND LRA.DT_INICIO_VIGENCIA = ’01/02/2012′ AND LRA.DT_FIM_VIGENCIA <= '10/02/2012'))
    ORDER BY LRA.DT_FIM_VIGENCIA,
    LAM.TX_AREA_MANUTENCAO ,
    LLE.TX_LOCAL_ESPECIFICO ,
    MVCSL.TX_SERIE ,
    MVTL.TX_COMPOSICAO ,
    MVUL.TX_TRM ,
    MVCSL.TX_UNIDADE;

    DECLARE contador integer;
    linhas integer;
    dataInicialTemp date;
    dataFinalTemp date;
    unidadeTemp VARCHAR2(20 BYTE);
    trmTemp VARCHAR2(20 BYTE);
    intervencaoTemp VARCHAR2(100 BYTE);
    serieTemp VARCHAR2(20 BYTE);
    localTemp VARCHAR2(200 BYTE);
    composicaoTemp VARCHAR2(20 BYTE);
    areaTemp VARCHAR2(200 BYTE);
    begin
    contador := 0;
    select count(*) into linhas from tabelatemporaria;
    while contador < linhas loop
    contador := contador + 1;

      select DT_INICIO_VIGENCIA, DT_FIM_VIGENCIA, TX_UNIDADE, TX_TRM, TX_TP_INTERVENCAO,
      TX_SERIE, TX_LOCAL_ESPECIFICO, TX_COMPOSICAO, TX_AREA_MANUTENCAO 
      into dataInicialTemp, dataFinalTemp, unidadeTemp, trmTemp, intervencaoTemp,
      serieTemp, localTemp, composicaoTemp, areaTemp
      from tabelatemporaria where ROWNUM &lt; 2;
    
      if (dataFinalTemp is null) then
        insert into tabelafinal 
        values (dataInicialTemp, dataFinalTemp, unidadeTemp, trmTemp, intervencaoTemp,
        serieTemp, localTemp, composicaoTemp, areaTemp);
      else
        while (dataInicialTemp &lt; dataFinalTemp + 1) loop
          insert into tabelafinal 
          values (dataInicialTemp, dataFinalTemp, unidadeTemp, trmTemp, intervencaoTemp,
          serieTemp, localTemp, composicaoTemp, areaTemp);
    
          dataInicialTemp := dataInicialTemp + 1;
        end loop;
      end if;
    
      delete from tabelatemporaria where ROWNUM &lt; 2;
    
    end loop;
    
    COMMIT;
    

    end;

    select * from tabelafinal;