Re: [oracle_br] Duvida na Procedure

2009-02-02 Por tôpico Gari Einsfeldt
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]



[oracle_br] Duvida na Procedure

2009-01-29 Por tôpico 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!