Saltar al contenido

Descubre Como Usar el Comando UPDATE en tus PL-SQL Packages en Oracle

PL-SQL Packages en OracleSi descubres como se debe utilizar correctamente el comando UPDATE en tus PL-SQL Packages en Oracle podrás aprender a actualizar los datos en las tablas o vistas dentro de tu Base de Datos Oracle.

El comando UPDATE como su nombre lo indica, te permite modificar o actualizar la información contenida en una tabla o en una vista, dándote la posibilidad de modificar uno o varios campos a la vez en tus PL-SQL Packages en Oracle.

Cuando requieres actualizar los datos en una tabla en tus PL-SQL Packages en Oracle, el comando UPDATE te permite modificar todos los datos de la tabla o filtrar solo los que cumplen alguna condición específica.

Revisemos como es la sintaxis básica del comando UPDATE en tus PL-SQL Packages en Oracle:

/* PL-SQL Packages en Oracle */

UPDATE {table | view} [alias]

SET { columna [, columna] … = { expresión } }

[WHERE condición]

Donde:

/* PL-SQL Packages en Oracle */

UPDATE= Permite identificar la tabla o la vista que deseas actualizar en tus PL-SQL Packages en Oracle.

Table= Es el nombre de la tabla que quieres modificar.

View= Es el nombre de la vista que quieres modificar.

Alias= Es un nombre abreviado para identificar la tabla o la vista.

SET= Permite identificar las columnas de la tabla o vista que vas a actualizar en tus PL-SQL Packages en Oracle.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”

¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Columna= Es el nombre de la columna que quieres actualizar.

Expresión= Corresponde al valor que vas a guardar en la columna.

WHERE= Permite identificar las condiciones para filtrar los datos que vas a actualizar en la tabla o vista definida en el UPDATE en tus PL-SQL Packages en Oracle.

Condición= Permite actualizar solo los registros que cumplan con una condición específica.

Ejemplo #1: Revisemos un ejemplo de cómo utilizar el UPDATE para actualizar la edad de un empleado, veamos como se hace:

/* PL-SQL Packages en Oracle */

Update t_empleado emp

Set emp.edad= 28

Where emp.id_empleado = pin_id_empleado;

En este ejemplo de PL-SQL Packages en Oracle solo se actualiza la edad de un empleado en particular.

Te propongo que pruebes de inmediato estos ejemplos en tu Base de Datos con tus propias tablas,  PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Packages en Oracle.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos

17 comentarios en «Descubre Como Usar el Comando UPDATE en tus PL-SQL Packages en Oracle»

    1. Hola Wagner, gracias por comunicarte, si entiendo bien quieres borrar un registro de una tabla padre (T1) que tiene registros asociados en una tabla hija (T2), para hacer esto primero debes borrar los registros de la tabla T2 que correspondan al id del registro de la tabla T1 y finalmente borrar el id en la tabla T1, de esta forma mantendrás la consistencia de los datos.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  1. estoy probando con este script
    UPDATE /*+BYPASS_UJVC*/
    (
    SELECT
    T2.TRANSACTIONID A1,
    T1.TRANSACTIONID A2
    FROM DIARIA T1
    INNER JOIN Historica T2 ON T1.id_articulo = T2.id_articulo and T1.registro=T2.registro where T2.procesada=0)
    )
    SET A1 = A2;

    pero aun con el hint me da error

    1. Hola Wagner, creo que tienes un paréntesis demas, pero para hacer este update prueba usar lo siguiente:

      UPDATE /*+BYPASS_UJVC*/
      (
      SELECT
      T2.TRANSACTIONID A1,
      T1.TRANSACTIONID A2
      FROM DIARIA T1,
      Historica T2
      Where T1.id_articulo = T2.id_articulo
      and T1.registro=T2.registro
      and T2.procesada=0
      )
      SET A1 = A2;

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  2. Un saludo. Un favor como puedo hacer un update a una tabla de acuerdo a la fecha en que fue insertado ese registro en la tabla en cuestión.

    Este es el query que uso:

    UPDATE wf_usr_reg_icvc
    SET numseqcdr = SQ_WF_REG_ICVC.nextval,
    nombre_archivo_s = ‘ + outputFileName + ‘
    WHERE numseqcdr is null
    and tipo_llamada = ‘ + tipoLlamada + ‘;

    Pero quiero que actualice esos mismos campos pero empezando desde el registro mas viejo hasta el mas actual, para ello cuento con el campo en la tabla insert_date..

    Por favor tu ayuda…¡¡¡

    1. Hola Edison, gracias por comunicarte, el problema que quieres resolver tiene sus complicaciones pero nada que no tenga solución, te mando la forma de como lo resolvi, debes hacer algo como esto:

      UPDATE ( Select numseqcdr, nombre_archivo_s
      From wf_usr_reg_icvc
      WHERE numseqcdr is null
      and tipo_llamada = ‘ + tipoLlamada + ‘
      Order by insert_date
      ) dat
      SET dat.numseqcdr = SQ_WF_REG_ICVC.nextval,
      dat.nombre_archivo_s = ‘ + outputFileName + ‘;

      Fíjate que la subquery ordena los datos de forma ascendente, asi consigues lo que necesitas, espero que te sirva.

      PD: Ya obtuviste mi reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aun no lo has hecho reclama el tuyo haciendo clic aquí:
      https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

    1. Que tal Gibran, gracias por comunicarte, claro que si es factible usar un bulk collect ya que manejar datos en estructuras es mucho mas rápido, pero también te recomiendo que revises que el update no este haciendo full en una de las tablas que usas, gracias.

      PD: Si te gusto este artículo te invito a que compartas este enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar esta información, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito on Oracle.
      https://dominatuspackagesen0racle.com/

  3. Hola Roberto, te felicito por todo el material que publicas; es muy didáctico.

    Ahora bien quisiera realizarte la consulta siguiente: Al realizar la actualización de 26 millones de registros, utilizando oracle developer 4, aparece el error IO Error: Conection reset Vendor code 17002 después de cierto tiempo. Es posible que la forma en que se realiza el UPDATE ocasione este error? Saludos cordiales y gracias por la atención prestada.

    1. Hola Eris, gracias por comunicarte y por tu comentario, respecto del error que indicas este no esta relacionado con el Update, mas bien es un problema en tu archivo tnsnames.ora, te aconsejo que revises el puerto y el nombre del host de la conexión el que por ejemplo no debe ser ‘localhost’ que muchas veces es el predeterminado por Developer, gracias.

      PD: Si te han gustado los artículos te invito a que compartas el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar esta información, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

    1. Hola Janet, gracias por comunicarte, para hacer ese update primero debes hacer obtener los datos de tu tabla Y y luego hacer el update a la tabla X por el campo relación, algo como lo siguiente:

      select campo_1, campo_2, campo_relacion
      into v_campo_1, v_campo_2, v_campo_relacion
      from tabla_y;

      update tabla_x
      set campo_1= v_campo_1,
      campo_2= v_campo_2,
      where campo_relacion = v_campo_relacion;

      PD: Ya pudiste ver mi libro reporte sobre ‘Cómo Crear un SELECT Eficiente en ORACLE en Solo 7 Pasos’, si aun no lo tienes en tus manos puedes obtenerlo desde aquí: https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  4. Buenas,
    Podrias ayudarme con un pequeño problema? Te lo agradeceria mucho:
    Estoy tratando de hacer un Update a un campo (id_pago(clave foranea)) de la tabla Curso1 (que actualmente esta null) este campo(numerico) debera tener un 1, 2 o 3, si la persona pago la matricula (1) o si hizo un pago parcial(2) o si no ha pagado(3). La tabla Pago tiene la info de las personas que han pagado la matricula o han hecho un pago parcial.
    Tengo esto:

    Update Curso1 C
    Set c.id_pago=case when c.valorcurso=p.valorpagado then ‘1’
    when c.valorcurso>p.valorpagado then ‘2’
    else ‘3’ end
    from Curso1 c full outer join Pago p
    on c.id_persona=p.id_persona and c.id_colegio=p.id_colegio;

    de antemano muchas gracias.

    1. Hola Carlos, gracias por comunicarte, dentro de un update no puedes usar un from, para este caso lo mejor es hacer un cursor a la tabla de pago y cuando lo leas debes ir haciendo el update, algo como lo siguiente:
      Update Curso1 C
      Set c.id_pago=case when c.valorcurso=cursor_reg.valorpagado then ‘1’
      when c.valorcurso>cursor_reg.valorpagado then ‘2’
      else ‘3’ end
      where c.id_persona=cursor_reg.id_persona
      and c.id_colegio=cursor_reg.id_colegio;

      En este enlace explico como usar un cursor:
      https://dominatuspackagesen0racle.com/como-se-debe-utilizar-un-cursor-en-tus-pl-sql-procedures-en-oracle.html

      PD: Ya viste mi guía sobre “Cómo Crear SELECT Eficientes en ORACLE en Solo 7 Pasos”, si aun no la tienes en tus manos puedes obtenerla gratis desde aquí: https://dominatuspackagesen0racle.com/cmrz

      PD2: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/cmbl/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  5. Buen dia quisiera saber donde es el error ya que no me cambia los registros y no logro ver la insercion en la otra tabla ,si me corrigen por favor
    create or replace package body esquema.name is

    Procedure actualizar_ccosto(p_empresa in number,
    p_codigo_alfanumerico in VARCHAR2,
    p_sub_codigo in number,
    p_ccosto in number) is

    Cursor c_art is
    select *
    from stk_articulo a
    where a.art_cod_alfanumerico = p_codigo_alfanumerico
    and a.art_ccosto_act = p_ccosto
    and a.art_sub_codigo_act = p_sub_codigo;

    v_ccosto_ant number;
    Begin
    — raise_application_error(-20005, p_ccosto);
    for c in c_art loop
    –se cargan los datos en el historico
    v_ccosto_ant := c.art_ccosto_act;
    — v_ccosto_ant := p_ccosto;
    Begin
    update stk_articulo a
    set a.art_ccosto_act = p_ccosto
    where a.art_empr = p_empresa
    –and a.art_codigo =c.art_codigo
    and a.art_cod_alfanumerico = c.art_cod_alfanumerico;
    –and a.art_cod_alfanumerico = p_codigo_alfanumerico;
    commit;
    exception
    when others then
    raise_application_error(-20001, sqlerrm);
    end;
    insert into act_articulo_hist
    ( –hart_ejercicio,
    hart_codigo,
    hart_cod_alfanumerico,
    hart_sub_codigo,
    hart_empr,
    hart_suc,
    hart_ubic,
    hart_ccosto,
    hart_categ,
    hart_desc,
    hart_fec_compra,
    hart_val_compra,
    hart_vida_util,
    hart_vida_util_inic,
    hart_val_rev_ej_ant,
    hart_coef_rev,
    hart_val_revaluado,
    hart_cuota_deprec_anual,
    hart_vida_util_restante,
    hart_val_neto_cierre,
    hart_deprec,
    hart_rev_acum,
    hart_deprec_acum,
    hart_dis_acum,
    hart_aum_acum,
    hart_fec_baja,
    hart_val_baja,
    hart_oper_baja,
    hart_clave_fin_doc,
    hart_obs,
    hart_val_neto_inicial,
    hart_cuo_dep_anual_ant)
    values
    ( –1,
    c.art_codigo,
    c.art_cod_alfanumerico,
    c.art_sub_codigo_act,
    c.art_empr,
    c.art_suc_act,
    c.art_ubic_act,
    v_ccosto_ant,
    c.art_categ_act,
    c.art_desc,
    c.art_fec_compra_act,
    c.art_val_compra_act,
    c.art_vida_util_act,
    c.art_vida_util_inic_act,
    c.art_val_rev_ej_ant_act,
    c.art_coef_rev_act,
    c.art_val_revaluado_act,
    c.art_cuota_deprec_anual_act,
    c.art_vida_util_restante_act,
    c.art_val_neto_cierre_act,
    c.art_deprec_act,
    c.art_rev_acum_act,
    c.art_deprec_acum_act,
    c.art_dis_acum_act,
    c.art_aum_acum_act,
    c.art_fec_baja_act,
    c.art_val_baja_act,
    c.art_oper_baja_act,
    c.art_clave_fin_doc_act,
    c.art_obs_act,
    c.art_val_neto_inicial_act,
    c.art_cuo_dep_anual_ant_act);
    end loop;
    commit;
    exception
    when others then
    raise_application_error(-20002, sqlerrm);
    end;
    end;

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.