sql >> Base de Datos >  >> RDS >> Oracle

La consulta Oracle SQL Update tarda días en actualizarse

Puedes probar esto

  1  MERGE
  2     INTO  target_table tgt
  3     USING source_table src
  4     ON  ( src.object_id = tgt.object_id )
  5  WHEN MATCHED
  6  THEN
  7     UPDATE
  8     SET   tgt.object_name = src.object_name
  9     ,     tgt.object_type = src.object_type
 10  WHEN NOT MATCHED
 11  THEN
 12     INSERT ( tgt.object_id
 13            , tgt.object_name
 14            , tgt.object_type )
 15     VALUES ( src.object_id
 16            , src.object_name
 17            , src.object_type );

La sintaxis al principio parece un poco desalentadora, pero si la leemos de arriba a abajo, es bastante intuitiva. Tenga en cuenta las siguientes cláusulas:

•MERGE (línea 1):como se indicó anteriormente, esta es ahora la cuarta instrucción DML en Oracle. Cualquier sugerencia que deseemos agregar sigue directamente a esta palabra clave (es decir, MERGE /*+ HINT */);

•INTO (línea 2):así es como especificamos el objetivo para el MERGE. El destino debe ser una tabla o una vista actualizable (aquí no se puede usar una vista en línea);

•USING (línea 3):la cláusula USING representa el conjunto de datos de origen para MERGE. Puede ser una sola tabla (como en nuestro ejemplo) o una vista en línea;

•ON () (línea 4):la cláusula ON es donde proporcionamos la unión entre el conjunto de datos de origen y la tabla de destino. Tenga en cuenta que las condiciones de unión deben estar entre paréntesis;

•CUANDO COINCIDE (línea 5):esta cláusula es donde le indicamos a Oracle qué hacer cuando ya tenemos un registro coincidente en la tabla de destino (es decir, hay una unión entre los conjuntos de datos de origen y de destino). Obviamente queremos una ACTUALIZACIÓN en este caso. Una de las restricciones de esta cláusula es que no podemos actualizar ninguna de las columnas utilizadas en la cláusula ON (aunque, por supuesto, no es necesario que ya coincidan). Cualquier intento de incluir una columna de combinación generará una excepción de identificador no válido no intuitivo; y

•CUANDO NO COINCIDE (línea 10):esta cláusula es donde INSERTAMOS registros para los que no hay una coincidencia actual.