Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema con error oracle

Estas en el tema de Problema con error oracle en el foro de Oracle en Foros del Web. create or replace procedure actualizarPrecio(c articulos.codArticulos%type) is begin if(precio <10000) then update articulos set precio= precio+500 where codArticulo = c; elsif(precio between 10000 and 15000) ...
  #1 (permalink)  
Antiguo 30/05/2012, 06:48
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Sonrisa Problema con error oracle

create or replace procedure actualizarPrecio(c articulos.codArticulos%type)
is
begin
if(precio <10000) then
update articulos set precio= precio+500 where codArticulo = c;
elsif(precio between 10000 and 15000) then
update articulos set precio= precio+1500 where codArticulo = c;
elsif(precio > 20000) then
update articulos set precio=precio+200 where codArticulo = c;
elsif(precio = null) then
update articulos set precio = precio+0 where codArticulo = c;
end if;
commit;
end actualizarPrecio;

Este es mi codigo, el error que me arroja es el siguiente, de antemno agradezco cualquier ayuda. y el ejercicio no es con cursor, solo con un procedimiento almacenado.

ERROR en línea 0: PL/SQL: Compilation unit analysis terminated
  #2 (permalink)  
Antiguo 30/05/2012, 09:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con error oracle

Cuando dices:
if(precio <10000) then

Donde se declara la variable precio?

Otro apunte es la forma como validas si la variable es null.
Cambia
elsif(precio = null) then
por
elsif(precio IS NULL) then

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/05/2012, 11:56
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Problema con error oracle

Lo clavaste. Huesos.

Darsk, mucho ojo con lo que te pone Huesos. El hacer la comparación = null, SIEMPRE, SIEMPRE te retornará FALSE, lo correcto es lo que te pone "Bones" : IS NULL

Un error muy comun en los novatos ( Todos hemos pasado por ello )
  #4 (permalink)  
Antiguo 30/05/2012, 15:52
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con error oracle

Cambie el codigo pero me sigue arrojando el miso error, lo cambie y asi me quedo.

create or replace procedure actualizarPrecio(c articulos.codArticulos%type)
is
pre articulos.precio%type;
begin
select precio into pre from articulos;
if(pre <10000) then
update articulos set pre= pre+500 where codArticulo = c;
elsif(pre between 10000 and 15000) then
update articulos set pre= pre+1500 where codArticulo = c;
elsif(pre > 20000) then
update articulos set pre=pre+200 where codArticulo = c;
elsif(pre is null) then
update articulos set pre = pre+0 where codArticulo = c;
end if;
commit;
end actualizarPrecio;

de antemano cualquier ayuda la agradezco.

Última edición por Darsk; 30/05/2012 a las 16:03
  #5 (permalink)  
Antiguo 30/05/2012, 16:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con error oracle

Veo varias inconsistencias en tu codigo.
Por ejemplo:
select precio into pre from articulos;
Esto es un cursor implicito para manejar asignaciones cuando numero de registros en el resultado de un query es 1. Si el resultado es mayor a uno, te saldrá un error TOO_MANY-ROWS.

Dudo que el resultado de la consulta select precio from articulos; tenga un solo registro.

update articulos set pre= pre+1500 where codArticulo = c;
El campo de la tabla se llama precio según la primera sentencia. Y en esta estas escribiendo el nombre de campo como pre.

Corrige estos problemas y nos cuentas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 31/05/2012, 04:47
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con error oracle

create or replace procedure actualiza(c articulos.codArticulo)
is
pre articulos.precio%type;
begin
select precio into pre from articulos where codArticulo = c;
if(pre < 1000) then
update articulos set precio=precio+500 where codArticulo = c;
elsif(pre between 10000 and 15000) then
update articulos set precio = precio+1500 where codArticulo = c;
elsif(pre > 20000)then
update articulos set precio = precio+2000 where codArticulo = c;
elsif(pre is null)then
update articulos set precio = 0 where codArticulo = c;
end if;
commit;
end;


asi quedo mi codigo y no supe que mas hacer, estoy desesperado, como puedo quedarme atascado tanto rato en un cogido. me lanza el mismo error, saludos.

pd : no se si la sintaxis es buena, almenos los updates solos me resultan.


ERROR en línea 0: PL/SQL: Compilation unit analysis terminated

Etiquetas: pl-sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:35.