PDA

Ver la Versión Completa : PL/SQL - Stored proc y Cursor


Paulao
29-05-2008, 13:53:25
Como este es un foro de varios, entonces pongo mi duda aca. Necesito hacer una SP(Estoy estudiando PL/SQL) con un cursor que haga el seguinte: Cambiar todos los codigos de mitabla, pues todos los codigos estan igual a uno(1) y necesito hacer que los codigos queden:1,2,3,4 y 5. Son 5 registros en mi tabla solamente. Mi tabla estas asi:
1 Jose
1 Maria
1 Pedro
1 Mara
1 João
y deberia quedar asi despues de la SP
1 Jose
2 Maria
3 Pedro
4 Mara
5 João
Esto es un ejercicio. Mi SP estas abajo

CREATE OR REPLACE PROCEDURE ATUALIZA_PROD
AS
N_COD INTEGER;

CURSOR CUR_ATU
IS
SELECT CODPROD FROM TB_PC_PRODUTO;

BEGIN

OPEN CUR_ATU;
LOOP
FETCH CUR_ATU INTO N_COD;

UPDATE TB_PC_PRODUTO
SET CODPROD = N_COD
WHERE CODPROD = 1;

N_COD := N_COD+1;
EXIT WHEN N_COD = 6;
END LOOP;
END ATUALIZA_PROD;
/

poliburro
29-05-2008, 14:11:40
OPEN CUR_ATU;
LOOP
FETCH CUR_ATU INTO N_COD;

UPDATE TB_PC_PRODUTO
SET CODPROD = N_COD
WHERE CODPROD = 1;

N_COD := N_COD+1;
EXIT WHEN N_COD = 6;
END LOOP;



Al final las claves quedarán con el último N_COD calculado.

La lógica es correcta, pero debido a que en la tabla las claves están de un principio repetidas, deberás obtener del cursor además del código el nombre para hacer la actualización de la siguiente manera:



UPDATE TB_PC_PRODUTO
SET CODPROD = ContCalc
WHERE CODPROD = N_COD And NomProd = N_NomProd;


Donde ContCal es un contador independiente que inicia en uno y ternina en N +1

Saludos

Paulao
29-05-2008, 17:37:15
Poliburro, muchas gracias mismo. Esto es que yo queriba. Gracias!!!!