multithreading - parametros - Implementación de subprocesamiento múltiple en procedimientos de Oracle
procedimientos en oracle ejemplos (2)
Estoy trabajando en Oracle 10gR2.
Y aquí está mi problema -
Tengo un procedimiento, vamos a llamarlo * proc_parent * (dentro de un paquete) que se supone que llama a otro procedimiento, vamos a llamarlo * user_creation * . Tengo que llamar a * user_creation * dentro de un bucle, que está leyendo algunas columnas de una tabla, y estos valores de columna se pasan como parámetros al procedimiento * user_creation * .
El código es así:
FOR i IN (SELECT community_id,
password,
username
FROM customer
WHERE community_id IS NOT NULL
AND created_by = ''SRC_GLOB''
)
LOOP
user_creation (i.community_id,i.password,i.username);
END LOOP;
COMMIT;
El procedimiento user_Creation invoca un servicio web para cierta lógica empresarial y luego, en función de la respuesta, actualiza una tabla.
Necesito encontrar una forma de usar Multi-Threading aquí, de modo que pueda ejecutar varias instancias de este procedimiento para acelerar las cosas. Sé que puedo usar * DBMS_SCHEDULER * y probablemente * DBMS_ALERT * pero no puedo descifrar cómo usarlos dentro de un ciclo.
¿Alguien puede guiarme en la dirección correcta?
Gracias, Ankur
Me gustaría cerrar esta pregunta. DBMS_SCHEDULER así como también DBMS_JOB (aunque se prefiere DBMS_SCHEDULER) se pueden usar dentro del ciclo para enviar y ejecutar el trabajo.
Por ejemplo, aquí hay un código de ejemplo, usando DBMS_JOB que puede invocarse dentro de un bucle:
...
FOR i IN (SELECT community_id,
password,
username
FROM customer
WHERE community_id IS NOT NULL
AND created_by = ''SRC_GLOB''
)
LOOP
DBMS_JOB.SUBMIT(JOB => jobnum,
WHAT => ''BEGIN user_creation (i.community_id,i.password,i.username); END;''
COMMIT;
END LOOP;
El uso de una confirmación después de ENVIAR iniciará el trabajo (y, por lo tanto, el procedimiento) en paralelo.
lo que puedes hacer es enviar muchos trabajos al mismo tiempo. Consulte el Ejemplo 28-2 Creación de un conjunto de trabajos ligeros en una sola transacción
Esto llena una tabla pl / sql con todos los trabajos que desea enviar en un tx, todo al mismo tiempo. Tan pronto como se envíen (habilitados), comenzarán a ejecutarse, tantos como el sistema pueda manejar, o tantos como lo permita un plan de administrador de recursos.
La sobrecarga que tienen los trabajos de Ligero es muy ... mínima / ligera.