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
> 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(-2, '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]