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 jusegant...@yahoo.com.br
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]