Opa, Só a titulo de convenção: quando falas em dropar a tabela, na verdade estás se referindo a eliminar as suas linhas e não dropar o objeto. É isso? Pela rápida olhada sobre o código, imagino que a tabela PRECO_PARCIAL já existe em algum schema.
Veja se não consegues fundir as duas queries. Talvez consigas criar um cursor apenas no inicio e resolve todo o seu problema. Se não, já cogitasse a idéia de usar tabelas de memória para estas transações intermediárias? Dúvida: consegues garantir que o cursor vlinha2 está te retornando algo? Não sei se conheces, mas tem o site asktom.oracle.com que é excelente para dúvidas deste tipo. 2009/1/29 jusegantine <[email protected]> > BOM DIA NOBRES JEDIS! > > SEGUINTE, TENHO MAIS UMA DUVIDA! > > EU CRIEI ,(COM A AJUDA DO FORUM É CLARO), UMA PROCEDURE QUE LE ALGUNS > DADOS E INSERE EM UMA TABELA. AGORA ESTOU TENTANDO CRIAR NA MESMA > PROCEDURE, UM PROCEDIMENTO QUE PEGUE ESSES DADOS QUE FORAM GRAVADOS > NA TABELA NOVA E GRAVE EM OUTRA, POREM NÃO OBTIVE SUCESSO NO MEU > CODIGO...NAO TENHO NEM IDEIA SE O QUE EU FIZ FAZ ALGUM SENTIDO, SÓ > TENTEI. > SEGUE O CODIGO ABAIXO, ALGUEM PODE ME AJUDAR POR FAVOR? > > DEPOIS QUE EU GRAVAR NA ULTIMA TABELA, EU QUERIA CRIAR UMA MANEIRA DE > TROPAR A PRIMEIRA TABELA QUE FOI GRAVADA, PARA QUE ELE FUNCIONE COMO > UMA TEMPORARIA POIS ELA NÃO TEM CHAVE PRIMARIA DEVIDO AO FATO DE QUE > MUITOS ITENS SE REPETE. > > VALEU GALERA, SEGUE CODIGO: > > CREATE OR REPLACE procedure sp_insere_tabela2(vano CHAR,vcod_modelo > CHAR) > Is > --Index By Binary_Integer; > BEGIN > > For vlinha In ( > > SELECT M.ANO, > M.cod_modelo, > M.item_agrupador, > M.DESCRICAO_AGRUPADOR, > M.QUANTIDADE_COMPOSICAO, > M.QUANTIDADE_COMPOSICAO*Avg (T.PRECO_UNITARIO_NACIONAL + (F_DOLAR > (vano)*T.PRECO_UNITARIO_IMPORTADO )) AS PRECO_MEDIO, > AVG(T.PRECO_UNITARIO_NACIONAL + (F_DOLAR(vano) > *T.PRECO_UNITARIO_IMPORTADO )) AS TOTAL > > FROM modelo_equipamento M join tabela_preco T ON (M.cod_equipamento = > T.cod_equipamento) > > GROUP BY M.cod_modelo,M.item_agrupador, > M.QUANTIDADE_COMPOSICAO,M.ANO,M.DESCRICAO_AGRUPADOR) > > --AQUI EU DOU UM INSERT NA PRIMEIRA TABELA, A QUE SERIA UMA TEMPORARIA > LOOP > INSERT INTO PRECO_PARCIAL > (ANO,COD_MODELO,ITEM_AGRUPADOR,DESCRICAO_AGRUPADOR,QUANTIDADE_COMPOSIC > AO, > PRECO_MEDIO,TOTAL) > > VALUES > (vlinha.ANO,vlinha.COD_MODELO,vlinha.ITEM_AGRUPADOR,vlinha.DESCRICAO_A > GRUPADOR, > vlinha.QUANTIDADE_COMPOSICAO,vlinha.PRECO_MEDIO,vlinha.TOTAL); > > End Loop; > > COMMIT; > > --AQUI EU TENTEI INSERIR OS DADOS DA PRIMEIRA TABELA NESTA ULTIMA > CHAMADA DE PRECIFICACAO_DETALHADA > > For vlinha2 In(select r1.ano as ano, > r1.cod_modelo as cod_modelo, > r2.QUANTIDADE_INVENTARIO as quantidade_inventario, r2.unidade as > unidade, r1.preco_modelo as preco_modelo, > r1.preco_modelo*r2.QUANTIDADE_INVENTARIO AS VALOR_CCA, > r3.custo_indireto AS CUSTO_INDIRETO, > r1.preco_modelo*r2.QUANTIDADE_INVENTARIO*(1+r3.custo_indireto) as > VALOR_CCA_COM_CUSTO_INDIRETO, > r3.fator_ociosidade as FATOR_OCIOSIDADE, > r1.preco_modelo*r2.QUANTIDADE_INVENTARIO*(1+r3.custo_indireto)*(1- > r3.fator_ociosidade) AS VALOR_CCA_COM_OCIOSIDADE > > from (select ano,cod_modelo, sum(total) as preco_modelo from > preco_parcial where ano = vano and cod_modelo = vcod_modelo group by > ano, cod_modelo) > r1 JOIN (select ano, cod_modelo, sum(quantidade_inventario) as > QUANTIDADE_INVENTARIO,unidade from quantitativo_fisico where ano = > vano and cod_modelo = vcod_modelo group by ano, cod_modelo,unidade) > r2 > ON(r1.ano = r2.ano and r1.cod_modelo = r2.cod_modelo) JOIN (select > ano,cod_modelo,custo_indireto,fator_ociosidade from modelo_fator > where ano = vano and cod_modelo = cod_modelo group by ano, > cod_modelo,custo_indireto,fator_ociosidade) r3 > ON(r2.ano = r3.ano and r2.cod_modelo = r3.cod_modelo)) LOOP > > INSERT INTO PRECIFICACAO_DETALHADA (ANO,COD_MODELO, > QUANTIDADE_INVENTARIO,UNIDADE,PRECO_MODELO, > VALOR_CCA,CUSTO_INDIRETO, > VALOR_CCA_COM_CUSTO_INDIRETO,FATOR_OCIOSIDADE, > VALOR_CCA_COM_OCIOSIDADE) > > VALUES > (vlinha2.ANO,vlinha2.COD_MODELO,vlinha2.QUANTIDADE_INVENTARIO,vlinha2. > UNIDADE,vlinha2.PRECO_MODELO, > vlinha2.VALOR_CCA,vlinha2.CUSTO_INDIRETO, > vlinha2.VALOR_CCA_COM_CUSTO_INDIRETO,vlinha2.FATOR_OCIOSIDADE,vlinha2. > VALOR_CCA_COM_OCIOSIDADE); > > END LOOP; > > COMMIT; > > DELETE PRECO_PARCIAL; --AQUI TENTEI DROPAR A A TABELA DEPOIS DE > UTILIZA-LA PARA EVITAR DUPLICIDADE NO CALCULO > > Exception > When no_data_found > Then > raise_application_error(-20000, 'Nenhum Registro Encontrado'); > end sp_insere_tabela2; > / > > QUE A FORÇA ESTEJA COM VCS! > > > [As partes desta mensagem que não continham texto foram removidas]
