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

Fallo en consulta SQL

Estas en el tema de Fallo en consulta SQL en el foro de Oracle en Foros del Web. Buenos días, Estoy desarrollando consultas a una base de datos ORACLE, y no se que problema tiene esta consulta que me da error: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 14/09/2015, 04:09
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años, 8 meses
Puntos: 0
Fallo en consulta SQL

Buenos días,

Estoy desarrollando consultas a una base de datos ORACLE, y no se que problema tiene esta consulta que me da error:

Código SQL:
Ver original
  1. SELECT COUNT(DISTINCT HOSTNAME,INSTANCIA) AS INSTANCIAS_APP_COMPLEJAS
  2.  
  3. FROM
  4.  
  5. (SELECT *
  6. FROM `subsistemas`
  7.  
  8.  
  9. WHERE TIPO='SBL' OR
  10. (TIPO='SAP'
  11. AND INSTANCIA NOT LIKE 'DA%'
  12. AND MW_EDITION IN ('CI','D','SCS','JC')))alias
  13.  
  14. WHERE
  15. (
  16. IF((SELECT COUNT(DISTINCT HOSTNAME,INSTANCIA)
  17.  
  18. FROM
  19.  
  20. subsistemas
  21.  
  22. WHERE TIPO='SAP'
  23. AND MW_EDITION='SCS')=0,
  24. MW_EDITION IN ('CI','D','JC') OR TIPO='SBL',
  25. MW_EDITION IN ('CI','D','SCS') OR TIPO='SBL'
  26. )
  27. );
Concretamente me marca error en el primer IN de l clausula WHERE

Error en la línea de comandos : 27 Columna : 1
Informe de error -
Error SQL: ORA-00936: falta una expresión
00936. 00000 - "missing expression"

y por más vueltas que le doy no consigo ver que problema tiene.

¿alguien me echa una mano?

Gracias!

Última edición por gnzsoloyo; 14/09/2015 a las 06:27
  #2 (permalink)  
Antiguo 14/09/2015, 07:37
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Fallo en consulta SQL

Buenos días

Oracle no soporta la sentencia IF en consultas de la misma forma como lo hace MySQL.
Ademas, veo 2 where en la misma sentencia, cosa que es inaceptable para una sentencia SQL a no ser que se encuentren en subconsultas diferentes.

Me atrevería a decir que esa sentencia no funciona en ningún motor de base de datos.

Te recomiendo la revises y empieces a realizar las consultas internas. Una vez validadas, empiezas a jugar con subconsultas y las comparaciones que necesites.

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 14/09/2015, 14:37
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Fallo en consulta SQL

En mysql funciona perfectamente ( cambiando los when por if y tal) pero funciona perfectamente.
  #4 (permalink)  
Antiguo 14/09/2015, 16:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Fallo en consulta SQL

MySQL no es Oracle.
Los dos pertenecen a la misma empresa, pero son DBMS totalmente diferentes y con juegos de funciones, sintaxis y capacidades completamente distintas.
No puedes usar funciones no estándares entre sistemas tan diferentes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 15/09/2015, 02:43
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Fallo en consulta SQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
MySQL no es Oracle.
Los dos pertenecen a la misma empresa, pero son DBMS totalmente diferentes y con juegos de funciones, sintaxis y capacidades completamente distintas.
No puedes usar funciones no estándares entre sistemas tan diferentes.

Las funciones WHEN son de oracle y el problema esta ahí. Si el WHEN del where los sustituyo por una de las condiciones, funciona perfectamente, es decir, sustituir esto

WHERE
(
IF((SELECT COUNT(DISTINCT HOSTNAME,INSTANCIA)

FROM

subsistemas

WHERE TIPO='SAP'
AND MW_EDITION='SCS')=0,
MW_EDITION IN ('CI','D','JC') OR TIPO='SBL',
MW_EDITION IN ('CI','D','SCS') OR TIPO='SBL'
)
);


Por esto


WHERE

MW_EDITION IN ('CI','D','JC') OR TIPO='SBL'

);

No se pueden utilizar when en los where?


Gracias
  #6 (permalink)  
Antiguo 15/09/2015, 07:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Fallo en consulta SQL

Para realizar condiciones según otra condición, en oracle es necesario recurrir a SQL dinamico y un poco de PL.

Creo que no es posible directamente en una sentencia SQL lograr esto.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 18/09/2015, 02:52
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Respuesta: Fallo en consulta SQL

Para usar IF en sentencias sql está el CASE..... WHEN

Buen dia.

Etiquetas: fallo, 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 20:20.