cursores

No uses cursores para copiar datos de una tabla a otra

No uses cursores para copiar datos de una tabla a otra

¿Te ha pasado que deseas copiar los datos de una tabla a otra usando cursores?

No uses cursores para hacer esto, ya que es más lento; podrá ser que no notes la diferencia con una tabla de 100 registros, pero ¿qué tal con 1 millón?.

El cursor va a leer registro por registro 🙁 y la sentencia insert into select dará el mismo resultado pero es mucho más rápido, como buena práctica te recomiendo probarlo por ti mismo.

 

Dentro de apex por default tenemos la tabla EMP, vamos a crear una copia con la siguiente sentencia

CREATE TABLE top_sales
  AS (SELECT * FROM emp);

y esta tabla va a guardar únicamente los empleados con un salario mayor a 3000.

Vamos a ver un ejemplo de un cursor 🙁

create or replace procedure "COPY_DATA"
is 
begin
 declare
    CURSOR c1 IS 
    SELECT EMPNO, ENAME, JOB, HIREDATE 
    FROM emp 
    WHERE sal > 3000;
    
    c1_rec c1%ROWTYPE;
    
    begin
    open c1;
        LOOP
            fetch c1 into c1_rec;
            exit when c1%NOTFOUND;
            INSERT INTO top_sales(EMPNO, ENAME, JOB, HIREDATE) VALUES (c1_rec.EMPNO, c1_rec.ENAME, c1_rec.JOB, c1_rec.HIREDATE);
        END LOOP;
    close c1;
    end;
end;

y ahora el mismo resultado menos código 😎

insert into 
top_sales(EMPNO, ENAME, JOB, HIREDATE) 
select EMPNO, ENAME, JOB, HIREDATE 
from emp  
WHERE sal > 3000;

Documentación:

https://www.techonthenet.com/oracle/insert.php

Post sugerido:

https://apex-developers.com/columnas-invisibles/

Por favor si te sirvió el tip, dale clic a los anuncios, me ayuda muchísimo para seguir creando más contenido.

[sg_popup id=”4″ event=”click”]Suscribirme al curso de Apex[/sg_popup]

One thought on “No uses cursores para copiar datos de una tabla a otra

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.