salida procedimientos procedimiento parametros funciones entrada ejercicios ejemplos ejecutar con almacenados almacenado multithreading oracle plsql oracle10g dbms-scheduler

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.