Pregunta

¿Hay alguna función de Oracle que indican la existencia de un registro, o cualquier otra técnica útil para lograr esto?

EDIT: el uso de la instrucción MERGE que hice:

MERGE
 INTO  lims_min.mytab src
 USING lims_min.mytab tgt
    ON (    src.col1 = tgt.col1
        AND tgt.col1 = p_val1
        AND src.col2 = tgt.col2
        AND tgt.col2 = p_val2
       )

 WHEN MATCHED
 THEN
 UPDATE
  SET tgt.col3=p_val3,
      tgt.col4=p_val4

 WHEN NOT MATCHED
 THEN
 INSERT  (col1, col2, col3, col4)
 VALUES  (val1, val2, val2, val4);

Me sale el error diciendo que es col3 identificador válido. Sin faltas de ortografía, y que está existiendo column.p_val1, p_val2, p_val3 y p_val4 son parámetros de cadena que se pasan al procedimiento almacenado. Estoy pensando que el problema puede estar en estos parametros, tal vez deberían ser colocados dentro de una instrucción WHERE? Algunas ideas?

¿Fue útil?

Solución

Está buscando merge en Oracle.

MERGE
       INTO  target_table tgt
      USING source_table src
         ON  ( src.object_id = tgt.object_id ) //The key to check if the record exists
       WHEN MATCHED // if exists
       THEN
     UPDATE
        SET   tgt.object_name = src.object_name //update it
        ,     tgt.object_type = src.object_type
       WHEN NOT MATCHED                         // if not exists
       THEN
     INSERT ( tgt.object_id                    //then insert
            , tgt.object_name
            , tgt.object_type )
     VALUES ( src.object_id
            , src.object_name
            , src.object_type );

Otros consejos

Mira en la instrucción MERGE

http://psoug.org/reference/merge.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top