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]
1 comment on “No uses cursores para copiar datos de una tabla a otra”