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

Realizar diferentes Update dependiendo de la clase

Estas en el tema de Realizar diferentes Update dependiendo de la clase en el foro de Oracle en Foros del Web. Hola a todos cuento con las siguientes tablas @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE TABLE empleados ( codigo CHAR ( 5 ) PRIMARY KEY ...
  #1 (permalink)  
Antiguo 23/08/2015, 15:39
 
Fecha de Ingreso: mayo-2015
Mensajes: 23
Antigüedad: 8 años, 11 meses
Puntos: 0
Realizar diferentes Update dependiendo de la clase

Hola a todos cuento con las siguientes tablas

Código SQL:
Ver original
  1. CREATE TABLE empleados(
  2. codigo CHAR(5) PRIMARY KEY,
  3. apellidos VARCHAR(35),
  4. nombres VARCHAR(25),
  5. sexo CHAR(1),
  6. clase CHAR(1),
  7. direccion VARCHAR(40),
  8. coddistrito CHAR(3))
  9.  
  10. CREATE TABLE planillas(
  11. codigo CHAR(5) ,
  12. sueldo REAL)
  13.  
  14. ALTER TABLE planillas ADD CONSTRAINT fk_4 FOREIGN KEY (codigo)
  15. REFERENCES empleados
Necesito actualizar el sueldo dependiendo de la clase sea A , B , C o D

La siguiente consulta me funciona en sql pero en Oracle me dice que no esta apropiadamente terminada , alguien me podria ayudar?

Código SQL:
Ver original
  1. UPDATE planillas
  2.     SET sueldo = CASE clase
  3.         WHEN 'A' THEN sueldo*1.20
  4.         WHEN 'B' THEN sueldo*1.15
  5.         WHEN 'C' THEN sueldo*1.14
  6.         WHEN 'D' THEN sueldo*1.10
  7.     END
  8. FROM planillas INNER JOIN empleados ON
  9. planillas.codigo=empleados.codigo
  10. WHERE clase IN ('A', 'B', 'C', 'D');

Última edición por gnzsoloyo; 24/08/2015 a las 13:49
  #2 (permalink)  
Antiguo 24/08/2015, 08:15
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: Realizar diferentes Update dependiendo de la clase

Yo veo bien la consulta.

Creo que te hace falta la opción ELSE pero no recuerdo si es un parametro obligatorio.

Código SQL:
Ver original
  1. SET sueldo = CASE clase
  2. WHEN 'A' THEN sueldo*1.20
  3. WHEN 'B' THEN sueldo*1.15
  4. WHEN 'C' THEN sueldo*1.14
  5. WHEN 'D' THEN sueldo*1.10
  6. ELSE sueldo*0
  7. END

Si no te funciona, muestranos el error exacto que te da Oracle para ver donde está el problema.

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 24/08/2015, 08:24
 
Fecha de Ingreso: mayo-2015
Mensajes: 23
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Realizar diferentes Update dependiendo de la clase

Cita:
Iniciado por huesos52 Ver Mensaje
Yo veo bien la consulta.

Creo que te hace falta la opción ELSE pero no recuerdo si es un parametro obligatorio.

Código SQL:
Ver original
  1. SET sueldo = CASE clase
  2. WHEN 'A' THEN sueldo*1.20
  3. WHEN 'B' THEN sueldo*1.15
  4. WHEN 'C' THEN sueldo*1.14
  5. WHEN 'D' THEN sueldo*1.10
  6. ELSE sueldo*0
  7. END

Si no te funciona, muestranos el error exacto que te da Oracle para ver donde está el problema.

Saludos
Sigue saliendo lo mismo este es el error:
Código SQL:
Ver original
  1. SQL> UPDATE planillas SET sueldo=CASE clase
  2.   2  WHEN 'A' THEN sueldo*1.20
  3.   3  WHEN 'B' THEN sueldo*1.15
  4.   4  WHEN 'C' THEN sueldo*1.14
  5.   5  WHEN 'D' THEN sueldo*1.10
  6.   6  ELSE sueldo*0
  7.   7  END
  8.   8  FROM planillas INNER JOIN empleados ON
  9.   9  planillas.codigo=empleados.codigo
  10.  10  WHERE clase IN('A','B','C','D');
  11. FROM planillas INNER JOIN empleados ON
  12. *
  13. ERROR at line 8:
  14. ORA-00933: SQL command NOT properly ended

Última edición por jpaulxD; 24/08/2015 a las 10:42
  #4 (permalink)  
Antiguo 24/08/2015, 13:37
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: Realizar diferentes Update dependiendo de la clase

Pruebalo así:

Código SQL:
Ver original
  1. UPDATE planillas
  2. SET sueldo = CASE
  3. WHEN clase = 'A' THEN sueldo*1.20
  4. WHEN clase = 'B' THEN sueldo*1.15
  5. WHEN clase = 'C' THEN sueldo*1.14
  6. WHEN clase = 'D' THEN sueldo*1.10
  7. ELSE sueldo
  8. END
  9. FROM planillas INNER JOIN empleados ON
  10. planillas.codigo=empleados.codigo
  11. WHERE clase IN ('A', 'B', 'C', 'D');
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 24/08/2015, 15:20
 
Fecha de Ingreso: mayo-2015
Mensajes: 23
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Realizar diferentes Update dependiendo de la clase

Cita:
Iniciado por huesos52 Ver Mensaje
Pruebalo así:

Código SQL:
Ver original
  1. UPDATE planillas
  2. SET sueldo = CASE
  3. WHEN clase = 'A' THEN sueldo*1.20
  4. WHEN clase = 'B' THEN sueldo*1.15
  5. WHEN clase = 'C' THEN sueldo*1.14
  6. WHEN clase = 'D' THEN sueldo*1.10
  7. ELSE sueldo
  8. END
  9. FROM planillas INNER JOIN empleados ON
  10. planillas.codigo=empleados.codigo
  11. WHERE clase IN ('A', 'B', 'C', 'D');
Ahora me sale esto

Código SQL:
Ver original
  1. SQL> UPDATE planillas
  2.   2  SET sueldo=CASE clase
  3.   3  WHEN clase = 'A' THEN sueldo*1.20
  4.   4  WHEN clase = 'B' THEN sueldo*1.15
  5.   5  WHEN clase = 'C' THEN sueldo*1.14
  6.   6  WHEN clase = 'D' THEN sueldo*1.10
  7.   7  ELSE sueldo
  8.   8  END
  9.   9  FROM planillas INNER JOIN empleados ON
  10.  10  planillas.codigo=empleados.codigo
  11.  11  WHERE clase IN('A','B','C','D');
  12. WHEN clase = 'A' THEN sueldo*1.20
  13.            *
  14. ERROR at line 3:
  15. ORA-00905: missing keyword

Etiquetas: case, join, sql, tablas, update
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 04:15.