SQL - Convertir código TSQL a PLSQL

   
Vista:

Convertir código TSQL a PLSQL

Publicado por Erik Hernán Sánchez Pérez (1 intervención) el 01/01/2016 03:12:05
Hola a todos, solicito la ayuda de los expertos ya que me han proporcionado de manera muy amable un código, sin embargo no he podido aplicarlo debido a que no se encuentra en PL-SQL.

El código es el siguiente y se encuentra en TSQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT
	t2.Contrato,
	t2.NumFactura,
	t2.Concepto,
	ISNULL(t1.Tipo, t3.Tipo)
FROM
	Tabla2 t2
	LEFT JOIN Tabla1 t1 ON (t1.Contrato = t2.Contrato)
		AND (UPPER(t2.Concepto) LIKE '%' + UPPER(t1.Concepto) + '%')
	LEFT JOIN Tabla1 t3 ON (t3.Contrato = t2.Contrato)
		AND (UPPER(t3.Concepto) LIKE '%NINGUNO%' OR UPPER(t3.Concepto) LIKE '%OTROS%')

Mi duda principalmente se encuentra en cómo poner ISNULL(t1.Tipo,t3.Tipo) en PL-SQL

El t3 es un alias para el t1.
Gracias de antemano.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Convertir código TSQL a PLSQL

Publicado por leonardo_josue (880 intervenciones) el 04/01/2016 20:14:43
Hola Erik:

Me sorprende que hayas tenido que recurrir a un foro de consultas, cuando podrías haber encontrado la equivalencia preguntándole a SAN GOOGLE... checa esta liga:

http://www.w3schools.com/sql/sql_isnull.asp

Puedo suponer que al decir que quieres cambiar tu código a PL-SQL te refieres a que estás trabajando con ORACLE, siempre es importante mencionar con qué motor de BD's estás trabajando.

Finalmente dos observaciones:

1. No es recomendable que en las cláusulas del ON coloques condiciones de filtrado, ya que echas a perder la optimización de los índices... en lugar de esto utiliza la cláusula WHERE para colocar estas condiciones, en otras palabras, en lugar de tener esto:

1
2
3
4
5
6
7
8
...
FROM
   Tabla2 t2
LEFT JOIN
   Tabla1 t1 ON
      (t1.Contrato = t2.Contrato)
      AND (UPPER(t2.Concepto) LIKE '%' + UPPER(t1.Concepto) + '%')
...

haz esto:

1
2
3
4
5
6
7
8
FROM
   Tabla2 t2
LEFT JOIN
   Tabla1 t1 ON
      (t1.Contrato = t2.Contrato)
WHERE
      (UPPER(t2.Concepto) LIKE '%' + UPPER(t1.Concepto) + '%')
...

Es decir, en el ON deja sólo las condiciones de igualdad entre las llaves, el resto de las condiciones colócalas en el WHERE.

2. No es recomendable el uso de comparaciones con LIKE '%algo%' ya que estas tienen un rendimiento terrible al tener que hacer una comparación exhaustiva, lo que puede afectar el rendimiento de tu servidor. Si te es posible, evítalas, pero si es absolutamente necesario que las utilices, entonces trata de hacer comparaciones unilaterales, es decir, en lugar de colocar el comodín % a ambos lados de la palabra a buscar, has compara sólo sobre el inicio o fin de la cadena:

1
2
3
...
Campo LIKE 'algo%' OR Campo LIKE '%algo'
...

Obviamente esto tiene sus desventajas si el texto que quieres buscar se encuentra a la mitad... Si este fuera el caso, entonces deberías buscar otra alternativa antes que el LIKE, como por ejemplo las BÚSQUEDAS DE TEXTO COMPLETO (FULL TEXT SEARCH).

Pregúntale a SAN GOOGLE acerca de este tipo de búsquedas y en general acerca de la indexación de textos.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar