Oracle - Cursor dinámico para usar dblinks dinamicamente

 
Vista:
Imágen de perfil de Daniel Rodas

Cursor dinámico para usar dblinks dinamicamente

Publicado por Daniel Rodas (9 intervenciones) el 09/08/2018 17:07:18
Hola

Tengo una porción de código de un stored procedure que hace mas o menos lo siguiente

DECLARE
CURSOR cursor_datos_procesar IS
SELECT DISTINCT FSC
FROM ORION.PSIILO_ORDER_ITEMS
WHERE FSC NOT IN (SELECT DISTINCT FSC
FROM P5AV_PICKMAP@DBL_GOM_PSIILO2 A,
P5AV_PICKMAP_DETAILS@DBL_GOM_PSIILO2 B
WHERE B.SUFFIX = A.SUFFIX
AND B.CAMPAIGN_NO =A.CAMPAIGN_NO);

BEGIN
FOR origen IN cursor_datos_procesar
LOOP
-- codigo
-- codigo
-- codigo
END LOOP;
END;

Yo necesito transformar esa declaración a una forma dinámica para que yo pueda mandarle como un parámetro del SP el nombre del DBLINK y así no tener que repetir la misma porción del código cuando cambie el DBLINK.

Se que puedo definir algo como lo siguiente:

DECLARE
TYPE EmpCurTyp IS REF CURSOR;
c EmpCurTyp;
emp_rec emp%ROWTYPE;
stmt_str VARCHAR2(200);
e_job emp.job%TYPE;

BEGIN
stmt_str := 'SELECT * FROM emp WHERE job = :1';
-- in a multi-row query
OPEN c FOR stmt_str USING 'MANAGER';
LOOP
FETCH c INTO emp_rec;
EXIT WHEN c%NOTFOUND;
END LOOP;
CLOSE c;
-- in a single-row query
EXECUTE IMMEDIATE stmt_str INTO emp_rec USING 'PRESIDENT';

END;
/

Pero me queda duda cuando hace el OPEN del cursor ese "USING 'MANAGER'" ¿porque se lo pone o que tendría que ver en mi caso? o ¿podría ir allí mi parámetro?

Otra duda con ese código es que si emp_rec recibe el cursor ¿como tomo cada valor de cada campo del select? porque en el ejemplo hacen select *; pero en mi caso hago select de campo(s) especifico(s)

¿No se si me expliqué suficiente en lo que necesito?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder