Si aprendes como se debe utilizar correctamente un CURSOR podrás manipular un conjunto de filas o registros de datos para procesarlos uno a la vez rápidamente en tus PL-SQL Procedures en Oracle.
Un CURSOR básicamente te permite leer una o varias filas obtenidas directamente con una consulta SELECT que aplica filtros o condiciones sobre un conjunto de tablas o vistas en tus PL-SQL Procedures en Oracle.
Revisemos como es la sintaxis de un CURSOR en tus PL-SQL Procedures en Oracle:
/* PL-SQL Procedures en Oracle */
CURSOR nombre_cursor [ (parámetro [, parámetro, …]) ] IS
SELECT…
Donde:
CURSOR= Es una palabra reservada de Oracle que permite declarar un Cursor en tus PL-SQL Procedures en Oracle.
Nombre_cursor= Permite asignar un nombre para identificar al Cursor.
IS= Permite indicar el inicio de la consulta SELECT dentro del Cursor.
SELECT…= Permite declarar la consulta de datos que serán obtenidos por el Cursor.
Parámetro= Permite declarar el o los parámetros que recibirá el Cursor. La sintaxis del parámetro es la siguiente:
/* PL-SQL Procedures en Oracle */
Nombre_variable [IN] tipo_dato [{:= | DEFAULT} valor_defecto]
Donde:
Nombre_variable= Permite asignar un nombre para identificar la variable dentro del Cursor.
IN= Permite definir que la variable será de entrada.
Tipo_dato= Permite definir el tipo de dato de la variable.
:= o DEFAULT= Permiten definir un valor por defecto al parámetro en caso de que este no sea enviado en tus PL-SQL Procedures en Oracle.
Valor_defecto= Permite asignar un valor por defecto al parámetro.
Veamos ahora un ejemplo de cómo se debe declarar un CURSOR en tus PL-SQL Procedures en Oracle.
TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
Ejemplo #1: Supone que necesitas procesar todos los empleados de un departamento en particular, para hacer esto necesitas declarar un Cursor, veamos como se hace:
/* PL-SQL Procedures en Oracle */
Procedure prc_mi_proceso(pin_id_departamento in number) is
CURSOR mi_cursor(lin_id_depto in number) is
Select
emp.nombre,
emp.direccion,
emp.ind_estado,
emp.edad,
emp.salario
From t_empleado emp
Where emp.id_departamento = lin_id_depto;
Begin
For mi_reg in mi_cursor(pin_id_departamento) loop
…procesar cada fila del cursor …
End loop;
End prc_mi_preceso;
En este ejemplo se muestra como se debe declarar un CURSOR en tus PL-SQL Procedures en Oracle, finalmente el cursor es leído por un ciclo For para procesar cada una de sus filas.
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 Procedures en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Procedures 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”
Estoy revisando un procedimiento que contiene un cursor similar al ejemplo con parametro de entrada, pero no entiendo de donde toma el valor del parametro del Cursor???
Hola Maria, gracias por comunicarte, respecto de tu consulta para pasar parámetros a un cursor solo debes agregarlos entre paréntesis de esta forma: nombre_de_tu_cursor(parametro1, parametro2, parametro3…).
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Una consulta, para que es importante pasarle parametros al cursor??? porque también puedo crear cursores sin pasarle parametros.
saludos
Hola Carlos, gracias por comunicarte y excelente tu pregunta, los parámetros en los cursores son importantes porque muchas veces necesitas filtrar la información del cursor con datos diferentes como otra fecha u otro código Id, ahora bien, también se puede crear un cursor sin parámetros que solo tenga datos de filtrado en duro, pero eso ocurre muy rara vez.
PD: Ya obtuviste mi reporte gratuito de ‘Cómo Construir un Select Eficiente en Oracle en Solo 7 Pasos’, si aún no lo has hecho puedes descargarlo desde aquí:
https://DominaTusPackagesEn0racle.com
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
como disminuir el tiempo de procesamiento en un cursor me demora 2 minutos aprox.?
Hola Pedro, gracias por comunicarte, para mejorar el rendimiento de un cursor debes revisar que la o las tablas que accesas tengan un índice creado para el campo llave que estas usando en la búsqueda, por ejemplo, si buscas datos por un campo fecha debes tener un indice creado para ese campo, de lo contrario se hace una busqueda Full a la tabla y eso puede tardar mucho tiempo.
PD: Si por algun motivo te perdiste el seminario sobre ‘SELECT de Múltiples Tablas’, ahora puedes ver la grabación en diferido la que estará disponible SOLO por unos días, tengo una oferta especial para ti, puedes acceder GRATIS desde aquí:
https://dominatuspackagesen0racle.com/v/seminario-smt
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Tengo un script en Oracle que justamente tiene varios cursores de este tipo es la primera vez que lo veo y lo estoy tratando de entender ingresando a varïos links de la Web, me encontré con tu enlace y me ha dado algunas luces al respecto. Lo que quiero saber si este tipo de cursores son mas rápidos que los que estaba acostumbrado a usar, te pregunto esto porque el script en mención se tarda demasiado y quería optimizarlo, pero me encontré con éstos cursores que
no los entiendo mucho.
Gracias anticipadamente por tu respuesta.
Hola Juan, gracias por comunicarte y muy buena tu pregunta, en realidad no existen tipos de cursores mas rápidos o mas lentos, si un cursor tarda demasiado en responder esto no se debe al tipo de cursor sino a la consulta Select que esta implemantada en el cursor, es decir, lo que debes optimizar es el Select para que obtenga los datos mas rapidamente, revisa que los filtros del Select tengan creados los indices apropiados en las tablas correspondientes, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
hola.
primero que todo decirte gracias por compartir material sobre este tema… se agradece mucho.
ahora tengo unas dudas con respecto a esto.
el mi_reg a que corresponde?
en el cado de un curso en el for…. loop se recorre automaticamente?
me podrias dar un ejemplo con inicio y final en un for?
desde ya muchas gracias
Hola Izaak, gracias por comunicarte y por tu excelente comentario, la palabra mi_reg es una variable del For que contiene la estructura del cursor, con ella puedes acceder a cada campo del cursor, por ejemplo, mi_reg.edad o mi_reg.nombre. Efectivamente el ciclo for se recorre de forma automática, por ejemplo:
For mi_reg in mi_cursor loop
if mi_reg.edad > 30 then
insert…
else
update…
end if;
End loop;
PD: Ya obtuviste mi libro gratis sobre “Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aun no lo has hecho, pudes descargarlo desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
En este ejemplo como le llega la variable de parametro indicada en el curso ?
Hola Hugo, gracias por comunicarte y muy buena tu pregunta, me di cuenta que me falto agregar el parámetro pero ya lo corregi, el parámetro se pasa entre paréntesis al cursor de la siguiente forma: mi_cursor(pin_id_departamento)
PD: Ya obtuviste mi Libro-Reporte gratuito sobre “Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aún no lo tienes puedes obtenerlo gratis desde aquí:
https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Deseo saber como puedo anidar 4 cursores y obtener fila por fila los registros.
Existe una tabla padre que contiene un registro, las otras 3 tablas pueden tener más de un registro. Deseo imprimir todos los registros de las tablas.
Hola Rolando, gracias por comunicarte, si quieres imprimir todos los registros de las tablas puedes unir cada consulta con la instrucción Union All, para que funcione cada consulta debe tener los mismos campos en el mismo orden, de esta forma:
select campo1, campo2, campo3 from tabla1
union all
select campo1, campo2, campo3 from tabla2
union all
select campo1, campo2, campo3 from tabla3
PD: Ya obtuviste mi libro-reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aun no lo tienes puedes obtenerlo desde el siguiente enlace:
https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Hola. Gracias por esta página de gran ayuda. Mi problema es que estoy realizando un reporte con Oracle Forms enviando los datos a un archivo en EXCEL con OLE. Lo que estoy haciendo es que a través de un cursor traigo los datos de un mes en particular. De manera que si enero tiene 31 días debe traerme 31 días, pero si el usuario no ha digitado información en algún día debe aumentarme una fila en el archivo. A través de la instrucción infila := infila+1; donde infila ya está inicializada en un valor, aumento las filas en el excel, pero cómo hacer para que el cursor se de cuenta que hacen falta datos en una fecha determinada. Gracias por tu ayuda
Hola Julie, gracias por comunicarte y por tu comentario, para solucionar este tipo de problemas lo mejor es que crees una tabla con las columnas que necesites mostrar en tu reporte, debes tener un campo que sea llave como un numero o la fecha mas la hora del reporte, uno de los campos debe ser el día o la fecha, luego inserta en la tabla las filas correspondientes a cada día del mes, por ejemplo:
01-01-2014
02-01-2014
…
31-01-2014
Luego usas el mismo cursor que ya tienes, lo recorres y haces un update a los días que si tienen datos, finalmente creas un nuevo cursor que liste los datos de tu tabla por el campo llave que creaste y los lleve al reporte, de esta forma tu reporte quedara con todos los días del mes y con datos en los días que corresponde. Una vez generado el reporte puedes borrar las filas que insertaste en tu tabla por el campo llave para evitar que la tabla cresca.
PD: Si te ha gustado este blog comparte 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.
Buen día Vicencio, Muchas gracias por tu aporte constructivo. Queria hacerte una pequeña consulta, que es la siguiente:
En un report tengo unas condiciones que son las siguientes:
/*Condicion: Si la diferencia es mayor o igual a 0*/
if v_diferencia >= 0.00 then
v_total := nvl(v_total,0.00)+nvl(v_diferencia,0.00);
end if;
/*Condicion: Si la diferencia es menor a 0*/
if v_diferencia < 0.00 then
v_total := nvl(v_total,0.00)-nvl(v_diferencia,0.00);
end if;
pero el detalle es que antes de eso tengo una Querie donde saco las variales v_total y v_diferencia que la declaro antes del Begin. Ahora mi consulta es como yo puedo hacer un cursor que me lea cada uno de los totales y que se aplique la diferencia dependiendo si es menor, igual o mayor a 0?
Saludos Cordiales….
Hola Antonio, gracias por comunicarte y por tu comentario, bueno para resolver este problema debes hacer algo como lo que te muestro en el artículo, donde declaro un Cursor y luego lo recorro con un ciclo For, algo como lo siguiente:
Cursor nombre_de_tu_cursor is
Select
from
where …;
begin
For tu_reg in nombre_de_tu_cursor loop
— Aqui colocas tus condiciones, los campos se obtienen asi: tu_reg.tu_campo —
/*Condicion: Si la diferencia es mayor o igual a 0*/
if tu_reg.diferencia >= 0.00 then
v_total := nvl(tu_reg.total,0.00)+nvl(tu_reg.diferencia,0.00);
end if;
/*Condicion: Si la diferencia es menor a 0*/
if tu_reg.diferencia < 0.00 then
v_total := nvl(tu_reg.total,0.00)-nvl(tu_reg.diferencia,0.00);
end if;
End loop;
end;
PD: Ya obtuviste el libro-reporte sobre "Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos", si aún no lo tienes obtenlo desde el siguiente enlace: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
He resuelto muchas dudas con este manual. Este año empece a programar en Oracle y me ha servido de mucho.
Hola Manuel, gracias por comunicarte y por tu comentario, me da mucho gusto que esta información te sea de utilidad, si te ha gustado este blog te invito a que compartas el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar este contenido, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Gente como les va?
Tengo que solucionar lo siguiente, en PL/SQL:
Desde una tabla cuya estructura son 8 campos de distinto tipo y longitud, debo tomar los datos para registar, en otra tabla, un registro por cada campo del registro madre.
Alguna ayuda de como hacerlo? se agradece!
Saludos cordiales!
Hola Alix, gracias por comunicarte, para resolver este problema te recomiendo que crees una tabla con un solo campo de tipo varchar2, luego crees un proceso que lea la tabla original e inserte cada columna en la nueva tabla, algo como lo siguiente:
CURSOR tu_cursor is
select campo1, campo2… campo8 from tu_tabla;
Begin
For tu_reg in tu_cursor loop
insert into tu_tabla_nueva(campo_nuevo) values (tu_reg.campo1);
insert into tu_tabla_nueva(campo_nuevo) values (tu_reg.campo2);
…
insert into tu_tabla_nueva(campo_nuevo) values (tu_reg.campo8);
end loop;
end;
PD: Ya obtuviste mi libro-reporte gratuito sobre “Como Crear un SELECT Eficiente en ORACLE en Solo 7 Pasos”, si aun no lo tienes puedes obtenerlo desde este enlace:
https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Tengo un trigger que se activa al ingresar un negocio x, el trabaja eficientemente pero hay momentos en los cuales las condiciones y las sentencias se corren y tengo que volver a estructurar el disparador. tiene algun conocimiento al respecto?
Hola Margarita, gracias por comunicarte, cuando creas un trigger estructurado y lo compilas es precisamente el compilador el que lo desordena al momento de guardarlo, pero no debes preocuparte por eso ya que el código sigue siendo el mismo solo que esta desordenado, solo deberías estructurarlo nuevamente en caso de hacer alguna mantención, gracias.
PD: Si te ha gustado el blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar este contenido.
Saludos
Roberto Vicencio – Para tu Éxito con Oracle.
¿Cómo puedo utilizar el resultado de un cursor para hacer una subconsulta?
digamos que tengo un procedimiento almacenado que contiene un cursor que trae los numeros de empleado
y tengo un Query que dice:
SELECT COUNT(*) FROM TB_FALTAS
where N_STATUS=4
and N_TIPO_AUSENCIA=5
AND N_NUM_EMPLEADO = 103
AND to_date(’01/01/2015′,’dd/mm/yyyy’) BETWEEN d_fecha_inicio
AND d_fecha_final
AND NOT EXISTS (SELECT n_id_vacacion FROM tb_vacaciones WHERE to_date(’01/01/2015′,’dd/mm/yyyy’) BETWEEN d_fecha_inicio AND d_fecha_final
AND n_num_empleado = 103 and N_STATUS=4 )
AND NOT EXISTS (SELECT n_id_ausencia FROM TB_FALTAS WHERE to_date(’01/01/2015′,’dd/mm/yyyy’) BETWEEN d_fecha_inicio
AND d_fecha_final
and n_tipo_ausencia 5
and n_status = 4
AND n_num_empleado = 103)
pero quiero que se haga para cada empleado del cursor de arriba en lugar del 103
Hola Lena, gracias por comunicarte, si ya tienes el cursor que trae los números de empleados solo debes hacer un ciclo for que lea el cursor y ejecute la query para cada empleado reemplazando el 103 por el dato del cursor, algo como lo siguiente:
For tu_reg in tu_cursor_empleados loop
SELECT COUNT(*) FROM TB_FALTAS
where N_STATUS=4
and N_TIPO_AUSENCIA=5
AND N_NUM_EMPLEADO = tu_reg.n_num_empleado –103
AND to_date(’01/01/2015′,’dd/mm/yyyy’) BETWEEN d_fecha_inicio
AND d_fecha_final
AND NOT EXISTS (SELECT n_id_vacacion FROM tb_vacaciones WHERE to_date(’01/01/2015′,’dd/mm/yyyy’) BETWEEN d_fecha_inicio AND d_fecha_final
AND n_num_empleado = tu_reg.n_num_empleado –103
and N_STATUS=4 )
AND NOT EXISTS (SELECT n_id_ausencia FROM TB_FALTAS WHERE to_date(’01/01/2015′,’dd/mm/yyyy’) BETWEEN d_fecha_inicio
AND d_fecha_final
and n_tipo_ausencia 5
and n_status = 4
AND n_num_empleado = tu_reg.n_num_empleado –103
)
End loop;
PD: Ya pudiste ver mi libro-reporte sobre ‘Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos’, si aún no lo tienes en tus manos puedes obtenerlo desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Hola tengo la necesidad de crear un procedimiento en BD que tenga un cursor pero de tipo in. Ejemplo:
procedure NombreProcedimiento(pcCursor in Cursor)
is
Begin
–tratamiento de datos
End;
Mi pregunta es si la sintaxis en la declaración es correcta o si aún al ser de entrada debería usar un ref cursor y la segunda es como sería llenarlo desde el form con datos atomicos y no precisamente de un select.
Espero puedas ayudarme
De antemano gracias
Hola Randall, gracias por comunicarte, es correcto lo que dices, al ser un cursor de entrada debes hacer referencia a un cursor que este declarado, para llenarlo desde un form debes siempre usar un select pero para colocar los datos del form usa la tabla dual para generar un registro en el cursor de esta forma: select form_dato1, form_dato2, form_dato3 from dual;
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/, si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar este contenido, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Hola y en que situaciones se debe usar un cursor, podrias dar un ejemplo por favor.
Hola Beto, gracias por comunicarte, un cursor se utiliza cuando debes procesar mas de una fila, en el ejemplo utilizo un cursor para procesar todos los empleados de un departamento, pero si quisiera procesar solo un empleado no requiero un cursor me sería suficiente usar un select, update o delete.
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 gratis desde aquí: https://dominatuspackagesen0racle.com/
PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
roberto..! una cosulta, que diferencia hay con un ref_cursor?
Saludos!
Hola Diego, gracias por comunicarte, el ref cursor te permite definir cursores vacíos para crearlos en tiempo de ejecución, generalmente se usan en procedures o function para retornar cursores que son recibidos por otro proceso.
PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar ver este contenido, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
para que sirve el open antes del for?
y el fetch?
Te agradeceria tu ayuda
create or replace
PROCEDURE VENTAS5 (xfecha DATE) as
xarticulo ventas.articulo%TYPE;
xvalor ventas.valor%TYPE;
cfecha ventas.fecha%type;
BEGIN
DECLARE CURSOR cventas (cfecha DATE)
IS
SELECT articulo,valor
FROM ventas
WHERE trunc(cfecha) = (sysdate)-1
— WHERE trunc(cfecha) = (’27/10/2016′)
and fecha = cfecha
and articulo = xarticulo
and valor = xvalor;
/* ORDER BY valor DESC;
*/
BEGIN
OPEN cventas(cfecha);
FOR i IN 1..5 LOOP
FETCH cventas INTO xarticulo,xvalor;
EXIT WHEN cventas%NOTFOUND;
INSERT INTO ventamayor VALUES(ventamayor_vm.nextval,xfecha,xarticulo,xvalor);
COMMIT;
END LOOP;
CLOSE cventas;
END;
END VENTAS5;
Hola Karen, gracias por comunicarte, el open sirve para abrir el cursor cventas y el fetch permite obtener los datos de cada fila que entregó el cursor, el ciclo for indica que se están procesando 5 registros del cursor.
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 gratis desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Saludos Roberto
Tengo varias dudas respecto al uso de cursores en ORACLE especialmente para actualizar registros, aquí leí que la declaración del cursor se hace con la parabra CURSOR en el declare, pero en mi trabajo han declarado cursores en Stored Procedures en el apartado AS como sigue:
create or replace PROCEDURE sp_not_lista(
v_pcFecInicial IN DATE,
v_pcFecFinal IN DATE,
v_vSuma IN NUMBER,
v_vcUsr_actual IN CHAR
)
AS
vcMLista SYS_REFCURSOR;
BEGIN
De igual forma aquí se utiliza
CURSOR nombre_cursor [ (parámetro [, parámetro, …]) ] IS
SELECT
para declarar el cursor y en mi trabajo utilizamos:
open vcMLista for
SELECT actm_lista.num_entrada ,
¿ Cual de ambas sintaxis es la corecta ?
Hola Juan, gracias por comunicarte, ambas formas son correctas, solo que el propósito del cursor es distinto, la clausula sys_refcursor permite declarar un cursor abierto es decir que la query se crea en tiempo de ejecución y la clausula cursor permite crear un cursor con una query fija.
PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Espero tu pronta respuesta en serio. Necesito saber como ejecutar un cursor … pues lo he tratado de ejecutar como un sp , ejemplo : Exec MICURSOR y me marca error . Me gustaria saber como ejecutar un CURSOR para ver q resultados devuelve
Hola Elizabeth, gracias por comunicarte, si quieres saber el resultado que arroja un cursor lo que debes hacer es tomar el select y ejecutarlo como cualquier otro select, pero si quieres ver el resultado del proceso donde tienes el cursor y los datos que procesas ahí debes ejecutar el sp, gracias.
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: Recurso recomendado para mejorar tus consultas Select a la base de datos: https://dominatuspackagesen0racle.com/cvsmt
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle
Director de DominaTusPackagesEn0racle.com
Buenas Tardes!
Como hago para crear un cursor que automaticamente me modifique parte del nombre de la tabla que quiero consultar. Por ejemplo que al nombre de la tabla se le modifique la fecha de acuerdo al parametro que le envie al proceso (PL/SQL):
cursor empleados is
select *
from NOMBRE_TABLA_201709;
Si yo ingreso como parametro en le proceso (PL/SQL) la fecha ‘201710’, necesito que en el cursor se modifique el nombre de la tabla a NOMBRE_TABLA_201710 y asi la consulta sea a dicha tabla.
Muchas Gracias de antemano por su ayuda.
Hola Juan, gracias por comunicarte, para hacer eso debes usar sql dinámico que consiste en crear consultas como cadena de caracteres que puedes modificar en tiempo de ejecución, algo cono lo siguiente:
lst_sql:= ‘select * from ‘||pst_nombre_tabla;
EXECUTE IMMEDIATE(lst_sql);
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.