ORACLE
[Link]
For update:
Es una cláusula no estándar que posee Oracle y que permite bloquear las filas que
aparecen en una instrucción SELECT de modo que esta instrucción genera una
transacción (si no estuviéramos ya en una). La razón es que nadie pueda modificar esas
filas a fin de trabajar sin problemas con ellas.
Esta cláusula se coloca antes de la cláusula ORDER BY. Ejemplo:
SELECT cif, nombre, localidad, direccion FROM empresas
WHERE provincia=’Palencia’
FOR UPDATE;
Por supuesto sólo podemos bloquear filas que otros usuarios no estén bloqueando. Y,
puesto que esta instrucción en realidad es de tipo DML, para finalizar el bloqueo
deberemos finalizar la transacción (con ROLLBACK o COMMIT).
Podemos especificar que se bloquee sólo una o más columnas:
SELECT cif, nombre, localidad, direccion FROM empresas
WHERE provincia=’Palencia’
FOR UPDATE OF direccion;
En el código anterior se bloquea solo la columna dirección.
Incluso podemos indicar un tiempo máximo de bloqueo:
SELECT cif, nombre, localidad, direccion FROM empresas
WHERE provincia=’Palencia’
FOR UPDATE WAIT 10;
--Bloquea las filas durante 10 segundos
Rownum
La función ROWNUM devuelve el número de la fila de una consulta. Por ejemplo en:
SELECT ROWNUM, edad, nombre FROM clientes
Aparece el número de cada fila en la posición de la tabla. Esa función actualiza sus
valores usando subconsultas. De modo que la consulta:
SELECT ROWNUM AS ranking, edad, nombre
FROM (
SELECT edad, nombre FROM clientes ORDER BY edad DESC
);
Puesto que:
SELECT edad, nombre FROM clientes ORDER BY edad DESC;
obtiene una lista de los clientes ordenada por edad, el SELECT superior obtendrá esa
lista pero mostrando el orden de las filas en esa consulta. Eso permite hacer consultas de
tipo top-n, (los n más....).
Por ejemplo para sacar el top-10 de la edad de los clientes (los 10 clientes más mayores)
´, haríamos:
SELECT ROWNUM AS ranking, edad, nombre FROM clientes
FROM (
SELECT edad, nombre FROM clientes ORDER BY edad DESC
)
WHERE ROWNUM<=10;
Concatenación de textos
El operador de concatenar texto permite unir dos textos. Normalmente se usa para juntar
resultados de diferentes expresiones en una miasma columna de una tabla. Todas las
bases de datos incluyen algún operador para encadenar textos. En SQL Server y otros
gestores es el signo + (suma), en Oracle son los signos ||. Ejemplo (Oracle):
SELECT tipo, modelo, tipo || ‘-’ || modelo “Clave Pieza”
FROM piezas;
El resultado sería:
Tip Clave
Modelo
o Pieza
AR 6 AR-6
AR 7 AR-7
AR 8 AR-8
AR 9 AR-9
AR 12 AR-12
AR 15 AR-15
AR 20 AR-20
AR 21 AR-21
BI 10 BI-10
BI 20 BI-20
BI 22 BI-22
BI 24 BI-24
En la mayoría de bases de datos, la función CONCAT (se describe más adelante) realiza
la misma función.