Se crea un procedure con nombre NOMBRE_PROCEDURE que recibe 3 parametros de entrada y retorna 2 parametros de salida.
- variableUno: lista de ids que se les debe hacer el update
- variableDos: valor que se debe setear en algun campo a actualizar
- variableTres: alguna condicion adicional que debe cumplir
- salidaUno: String que recoge todo lo que se actualizó
- salidaDos: Entero que retorna un codigo que permite comprobar que todo fue bien.
CREATE OR REPLACE PROCEDURE NOMBRE_PROCEDURE(
variableUno IN VARCHAR2,
variableDos IN VARCHAR2,
variableTres IN NUMBER,
salidaUno OUT NUMBER,
salidaDos OUT VARCHAR2
)
IS
TYPE ref1 IS REF CURSOR;
listaIds ref1;
indiceRecorrer NUMBER;
BEGIN
-- variableUno es un string separado por | donde se define una lista de ids ('1','2','3',...'n')
OPEN listaIds FOR SELECT t.* FROM TABLE(FN_SPLIT(variableUno,'|')) t;
LOOP
FETCH listaIds into indiceRecorrer;
EXIT WHEN listaIds%NOTFOUND;
--realizamos alguna accion
UPDATE TABLA_ACTUALIZAR SET ALGUN_CAMPO_ACTUALIZAR = variableDos WHERE ID_ACTUALIZAR = indiceRecorrer AND ALGUNA_COLUMNA_CONDICION = variableTres;
--recogo los ids actualizados (indiceRecorrer)
salidaUno := salidaUno || to_char(indiceRecorrer) || ',';
END LOOP;
salidaDos := 0; -- fuera del procedure se comprueba si salidaDos es == 0 entonces todo ha ido bien, sino ha sucedido algun error.
COMMIT;
EXCEPTION
WHEN OTHERS THEN
salidaDos := -1000;
DBMS_OUTPUT.PUT_LINE('SE PRODUJO UN ERROR EN EL PROCESO, SE REALIZARA UN ROLLBACK.' || SQLCODE || SQLERRM);
ROLLBACK;
RAISE;
END NOMBRE_PROCEDURE;
/
No hay comentarios.:
Publicar un comentario