- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 12 anos, 9 meses atrás por Anônimo.
-
AutorPosts
-
17 de fevereiro de 2012 às 2:41 pm #102821Anô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;17 de fevereiro de 2012 às 2:45 pm #102822Regis AraujoParticipante@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..!
17 de fevereiro de 2012 às 2:52 pm #102823Anô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 < 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;
end;
select * from tabelafinal;
17 de fevereiro de 2012 às 3:01 pm #102824Regis AraujoParticipante@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..!
17 de fevereiro de 2012 às 3:16 pm #102825Anô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. -
AutorPosts
- Você deve fazer login para responder a este tópico.