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 

>   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!