Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   PL/SQL - Stored proc y Cursor (https://www.clubdelphi.com/foros/showthread.php?t=56853)

Paulao 29-05-2008 13:53:25

PL/SQL - Stored proc y Cursor
 
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:
Cita:

1 Jose
1 Maria
1 Pedro
1 Mara
1 João
y deberia quedar asi despues de la SP
Cita:

1 Jose
2 Maria
3 Pedro
4 Mara
5 João
Esto es un ejercicio. Mi SP estas abajo

Código Delphi [-]
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

Cita:

Empezado por Paulao (Mensaje 289843)

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:


Código SQL [-]
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!!!!


La franja horaria es GMT +2. Ahora son las 12:25:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi