Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #102821
    Anônimo

      Bom dia.
      Pessoal, estou com um problemão sem solução ainda nesta sexta de carnaval…
      Crio duas tabelas, preencho uma e transporto os dados para a outra através de alguns critérios. Até aí tudo ótimo. O problema é que no fim dela eu dou um select não segunda tabela para retornar todos os registros que eu anteriormente, mas, acontece o seguinte erro: PLS-00428: é esperada uma cláusula INTO nesta instrução SELECT.

      Vou passar aqui minha consulta para vocês.
      Desde já agradeço a todos e bom carnaval.

      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 <= '10/02/2012') OR (LRA.DT_FIM_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 < 2; if (dataFinalTemp is null) then insert into tabelafinal values (dataInicialTemp, dataFinalTemp, unidadeTemp, trmTemp, intervencaoTemp, serieTemp, localTemp, composicaoTemp, areaTemp); else while (dataInicialTemp < 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 < 2; end loop; COMMIT; select * from tabelafinal; end;

      #102822
      Avatar photoRegis Araujo
      Participante

        @laqueiroz

        Bom dia.!

        O problema está neste seu ultimo select ” select * from tabelafinal; “, sempre em um bloco Pl/Sql todo select tem que possuir um INTO, caso contrario irá apresentar o erro PLS-00428: é esperada uma cláusula INTO nesta instrução SELECT.

        Retire o select de dentro do bloco Pl/Sql e rode ele após todo o procedimento ser concluido.. ai vc terá o resultado esperado.

        Abraços..!

        #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;

          #102824
          Avatar photoRegis Araujo
          Participante

            @laqueiroz

            Como q vc está fazendo isto?

            Está colocando o selecet junto da instrução toda??

            Tente rodar primeiro o bloco pl/sql e em outra sessão faça o ” select * from tabelafinal; ”

            Abraços..!

            #102825
            Anônimo

              @Thunder_Catz

              Exato.
              Executando o bloco primeiro e depois apenas o select funciona perfeitamente. Agora meu problema é fazer isso direto da aplicação.
              Não sei se tem como fazer isto em separado partindo da aplicação.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.
            plugins premium WordPress