Procedure Erro - Ajudaaa

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Trancado
Julia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Dom, 09 Dez 2007 4:24 pm
Localização: Caxias do Sul

Bom Pessoal Essa é a minha procedure a ideia é a seguinte:
q ali o pessoal digita o tipo do produto que ele quer fazer "uma promoçao"
o numero é por quanto ele ira dividir o preço no caso de "Carnes"

preciso de ajuda esta dando erros e não sei como resolver.... irei postar minhas tabelas tmb obrigado

Selecionar tudo

BEGIN
   prc_TESTE3 ('Carnes',2);
END;

CREATE OR REPLACE PROCEDURE prc_teste3 (
   prc_desctiposubproduto   varchar(100),
   prc_aux   number(10)
)
IS

  CURSOR CUR_tipo
    IS
      SELECT desctiposubproduto
       FROM tiposubproduto
       WHERE desctiposubproduto= PRC_desctiposubproduto;
       
  V_tipo varchar2(100);
  
  CURSOR CUR_calculo
    IS
      SELECT preço
       FROM produtopreco
       WHERE preço= PRC_aux;
       
  V_calculo number(10);
  
BEGIN
   for x in CUR_tipo
   loop
       V_tipo := x.desctiposubproduto;
   end loop;  

   for y in CUR_calculo
   loop
       V_calculo := x.preço;
   end loop; 
   
IF V_calculo <= 5
         THEN
      BEGIN
         UPDATE produtopreco
            SET preço := preço / prc_aux
          WHERE preço= PRC_aux;
      EXCEPTION
         WHEN OTHERS THEN
                        raise_application_error('20000','Ocorreu erro ao ALTERAR o registro. Descricao do erro : '
                                  );         
                  END;                                                                           
         END IF;
END;
TABELAS

Selecionar tudo

create table TipoProduto(
codTipoProduto number(3) not null,
descTipoProduto varchar(30) not null,
Constraint codTipoProduto primary key (codTipoProduto)
);




create table TipoSubProduto(
codTipoProduto number(3) not null,
codTipoSubProduto number(3) not null,
descTipoSubProduto varchar(40) not null,
Constraint codTipoSubProduto primary key (codTipoSubProduto,codTipoProduto),
Constraint codTipoProduto_fk1 foreign key (codTipoProduto)references TipoProduto(codTipoProduto)  
);





create table Produto(
codProduto number(3) not null,
nomeProduto varchar(40) not null,
statusProduto varchar(40) not null,
descricaoProduto varchar(40) not null,
codTipoProduto number(3) not null,
codTipoSubProduto number(3) not null,

Constraint codProduto_pk primary key (codProduto),
Constraint Produto_fk foreign key (codTipoProduto, codTipoSubProduto) references tipoSubProduto(codTipoProduto, codTipoSubProduto)  
);




create table Venda(
codVenda number(3) not null,
nomeComprador varchar(40) not null,
valorTotal number(3) not null,

Constraint Venda_pk primary key (codVenda)
);





create table Compra(
codCompra number(3) not null,
dataCompra date not null,
nomeFornecedor varchar(40) not null,
valorTotal number(3) not null,

Constraint Compra_pk primary key (codCompra)
);





create table Medida(
codMedida number(3) not null,
descMedida varchar(40) not null,

Constraint Medida_pk primary key (codMedida)
);




create table EstoqueSaida(
codVenda number(3) not null,
codProduto number(3) not null,
dataVenda date not null,
quantidade number(3) not null,
codMedida number(3) not null,
valor number(3) not null,

Constraint EstoqueSaida_pk primary key (codVenda, codProduto),
Constraint EstoqueSaida_fk1 foreign key (codVenda) references Venda(codVenda),
Constraint EstoqueSaida_fk2 foreign key (codProduto) references Produto(codProduto),
Constraint EstoqueSaida_fk3 foreign key (codMedida) references Medida(codMedida)
);




create table ProdutoPreco(

codProduto number(3)not null,
dataInicioPreco date not null,
dataFimPreco date not null,
codMedida number(3) not null,
preço number(3) not null,

Constraint ProdutoPreco_pk primary key (codProduto, dataInicioPreco),
Constraint ProdutoPreco_fk1 foreign key (codProduto) references produto(codProduto),
Constraint ProdutoPreco_fk2 foreign key (codMedida) references Medida(codMedida)
);




Create table EstoqueEntrada(
codCompra number(3) not null,
codProduto number(3) not null,
dataValidade date not null,
quantidade number(3) not null,
codMedida number(3) not null,
valorUnitario number(3) not null,

Constraint EstoqueEntrada_pk primary key (codCompra, codProduto),
Constraint EstoqueEntrada_fk1 foreign key (codCompra) references Compra(codCompra),
Constraint EstoqueEntrada_fk2 foreign key (codProduto) references Produto(codProduto),
Constraint EstoqueEntrada_fk3 foreign key (codMedida) references Medida(codMedida)
);
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Olá Julia,

dando uma olhada aqui eu encontrei 2 erros na procedure, um é no cabeçalho e outra no update...

esse aqui é o cabecalho que você criou.

Selecionar tudo

CREATE OR REPLACE PROCEDURE prc_teste3 ( 
   prc_desctiposubproduto   varchar(100), 
   prc_aux   number(10) 
) 
nesse caso você não precisa colocar o tamanho do campo do campo, você coloca somente o tipo dele... por exemplo..

Selecionar tudo

CREATE OR REPLACE PROCEDURE prc_teste3 (
   prc_desctiposubproduto   VARCHAR,
   prc_aux                  NUMBER
)
a outra alteração é no update.. abaixo está o seu update, você colocou dentro dele o ":"..

Selecionar tudo

           SET preço := preço / prc_aux 
o correto é .

Selecionar tudo

           SET preço = preço / prc_aux 
qualquer duvida estamos ai..

[]'s
Julia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Dom, 09 Dez 2007 4:24 pm
Localização: Caxias do Sul

Tineks corrigindo aqueles erros ele da o seguinte erro:

Selecionar tudo

ERROR na linha 2: PLS-00103: Encontrado o símbolo "PRC_DESCTIPOSUBPRODUTO" quando um dos seguintes símbolos era esperado:

   ( ; is with authid as cluster compress order using compiled
   wrapped external deterministic parallel_enable pipelined
O símbolo "(" foi substituído por "PRC_DESCTIPOSUBPRODUTO" para continuar.
Julia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Dom, 09 Dez 2007 4:24 pm
Localização: Caxias do Sul

ops é que tava faltando um parenteses. O erro mesmo é este:

Selecionar tudo

ERROR na linha 37: PL/SQL: SQL Statement ignored
Julia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Dom, 09 Dez 2007 4:24 pm
Localização: Caxias do Sul

problema resolvido :P brigadao pessoal!
romulozaf
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 13 Dez 2007 8:58 am
Localização: Belém - PA
Rômulo Fernandes

Estou precisando de ajuda para fazer funcionar algumas procedures automaticamente em um JOB. Só que ao tentar executar ocorre um erro que impossibilita a execução.

CENÁRIO: Estou criando um DM que tem a estrutura das tabelas DIMENSAO com a sintaxe DMCTR_DIM<nomeTabela> que está em um esquema específico no Oracle. Acontece que estas tabelas deste esquema recebem, ou deveriam receber cargas semanais que outras tabelas ODS que tem a seguinte sintaxe ODS_CTR_TB<nomeTabela> que também estão em um esquema específico no Oracle. As procedures estão no esquema DMCTR, ou seja, esquema que estão as tabelas DIM. Acredito ser por conta das PKs que também integram uma outra tabela que é a FATO do DM e por isso não pode executar a carga porque a procedure na linha 34 executa um DELETE na tabela para depois dar a carga novamente. Não sei como fazer para executar esta carga semanal sem que toda vez que tenha que deletar todos os dados das tabelas DMCTR_DIM.

Seja erro que ocorre:

Selecionar tudo

ORA-02292: integrity constraint (DMCTR.FK_LOCALIDADE) violated - child record found
ORA-06512: at "DMCTR.MAP_DIMLOCALIDADE", line 34
ORA-06512: at line 1
Segue abaixo a procedure para você poder me ajudar.

Selecionar tudo

CREATE OR REPLACE PROCEDURE MAP_DIMLOCALIDADE is
idregiao DMCTR_DIMlocalidade.idregiao%type;
descregiao DMCTR_DIMlocalidade.descregiao%type;
idestado DMCTR_DIMlocalidade.idestado%type;
desccurtaestado DMCTR_DIMlocalidade.desccurtaestado%type;
desclongaestado DMCTR_DIMlocalidade.desclongaestado%type;
idmesoregiao DMCTR_DIMlocalidade.idmesoregiao%type;
descmesoregiao DMCTR_DIMlocalidade.descmesoregiao%type;
idmicroregiao DMCTR_DIMlocalidade.idmicroregiao%type;
descmicroregiao DMCTR_DIMlocalidade.descmicroregiao%type;
idcidade DMCTR_DIMlocalidade.idcidade%type;
desccidade DMCTR_DIMlocalidade.desccidade%type;
amazonia DMCTR_DIMlocalidade.amazonia%type;
fronteira DMCTR_DIMlocalidade.fronteira%type;
capital DMCTR_DIMlocalidade.capital%type;
latitude DMCTR_DIMlocalidade.latitude%type;
longitude DMCTR_DIMlocalidade.longitude%type;
altitude DMCTR_DIMlocalidade.altitude%type;
area DMCTR_DIMlocalidade.area%type;

CURSOR curOrigemLocalidade is
select reg.regcod,reg.regnome,uf.ufcod,uf.ufsigla,uf.ufnome,mês.mesocod,mês.mesonome,
mic.microcod,mic.micronome,mun.muncoddv,mun.munnome,mun.amazonia,
mun.fronteira,mun.capital,mun.latitude,mun.longitude,mun.altitude,mun.area
from ODS.ODS_CTR_TBcadmun mun, ODS.ODS_CTR_TBcaduf uf, ODS.ODS_CTR_TBcadreg reg, ODS.ODS_CTR_TBcadmicro mic, ODS.ODS_CTR_TBcadmeso mês
where
mun.ufcod = to_char(uf.ufcod)
and mun.microcod = to_char(mic.microcod)
and mun.mesocod = to_char(mês.mesocod)
and uf.regcod = reg.regcod
order by mun.munnome;

begin
delete from DMCTR_DIMlocalidade;
commit;

OPEN curOrigemLocalidade;
LOOP
FETCH curOrigemLocalidade into idregiao,descregiao,idestado,desccurtaestado,desclongaestado,idmesoregiao,descmesoregiao,idmicroregiao,descmicroregiao,idcidade,desccidade,amazonia,fronteira,capital,latitude,longitude,altitude,area;

exit when curOrigemLocalidade%NOTFOUND;

insert into DMCTR_DIMlocalidade values(idregiao,descregiao,idestado,desccurtaestado,desclongaestado,idmesoregiao,descmesoregiao,idmicroregiao,descmicroregiao,idcidade,desccidade,amazonia,fronteira,capital,latitude,longitude,altitude,area);

END LOOP;
commit;
CLOSE curOrigemLocalidade;

end MAP_DIMLOCALIDADE;
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Tópico duplicado.
Trancado
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante