es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizar columna utilizando PL/SQL

Tengo una tabla T1 con 3 columnas y 100 registros. Todas las columnas y filas están llenas, pero los valores de la primera columna llamada ID están vacíos. Por lo tanto, quiero llenar la columna ID con orden numérico (1, 2, … 100) para las 100 filas utilizando un programa PL/SQL. He intentado con rownum y con una secuencia que funciona bien. Quiero intentarlo con un bloque PL/SQL. También he intentado escribir un bloque PL/SQL, sin embargo, no obtengo el resultado deseado.

declare
count1 number;
begin
SELECT COUNT(1) INTO COUNT1 FROM T1;
FOR I IN 1..COUNT1
loop
UPDATE T1 SET ID =I;
end loop;
end;
Tags:  ,

Answer

  1. Avatar for davy.ai

    El bloque pl/SQL mostrado arriba está cerca, pero no dará el resultado deseado.

    El problema con el bloque es que actualizará todas las filas de la tabla con el mismo valor de ID, que será igual al número de filas en la tabla. Esto se debe a que la consulta SELECT COUNT(1) INTO COUNT1 FROM T1 devuelve un valor único que representa el número total de filas en la tabla, y ese valor se utiliza luego para actualizar cada fila en el bucle.

    Para solucionarlo, debemos modificar el bucle para usar una variable de contador que se incrementa con cada iteración. Podemos hacer esto declarando otra variable, digamos id_counter, inicializándola en 1 antes del bucle. Luego, dentro del bucle, actualizaremos cada fila con el valor actual de la variable id_counter e incrementaremos para la próxima iteración. Aquí está el bloque corregido:

    declare
    count1 number;
    id_counter number := 1; -- inicializar el contador
    begin
    SELECT COUNT(1) INTO COUNT1 FROM T1;
    FOR I IN 1..COUNT1
    loop
    UPDATE T1 SET ID = id_counter WHERE rownum = I; -- actualizar solo la fila actual
    id_counter := id_counter + 1; -- incrementar el contador
    end loop;
    end;
    

    Con este bloque, cada fila se actualizará con un valor de ID único que se incrementa de 1 a 100, como se desea.

Comments are closed.