Error al generar sentencia update dinámicamente

BEGO
29 de Enero del 2006
Hola a todos,

Estoy haciendo un procedimiento que mediante un cursor recorre los registros de una tabla para modificar uno de sus campos.


CREATE OR REPLACE PROCEDURE REEMPLAZAR_67(
cadena IN varchar2,
tabla IN varchar2
)
AS

pCompNo VARCHAR2(16);

ColumnCompNo VARCHAR2(20);


tmpcadena varchar2(2);
tmptabla varchar2(30);
tmpsql varchar2(200);

TYPE C IS REF CURSOR;
C1 C;

BEGIN

tmptabla := tabla;
tmpcadena := cadena;
tmpsql := 'select comp_no from ' || tmptabla || ' for update';

OPEN C1 FOR tmpsql;
LOOP
FETCH C1
INTO pCompNo;
EXIT WHEN C1%NOTFOUND;


if SUBSTR(pCompNo,1,3)= '**1' then
ColumnCompNo := replace(pCompNo,'**13',tmpcadena);
else
ColumnCompNo := tmpcadena || substr(pCompNo,3);
end if;
dbms_output.put_line(ColumnCompNo );


tmpsql := 'UPDATE ' || tmptabla || ' SET COMP_NO = ' || ColumnCompNo ;
tmpsql := tmpsql || ' WHERE CURRENT OF C1';

dbms_output.put_line(tmpsql );
execute immediate tmpsql;



END LOOP;
CLOSE C1;

END;

donde me falla la sentencia execute. El procedimiento es el correcta ya que los resultados son los que necesito, pero no sé qué ocurre al contruir la sentencia UPDATE que falla.

Me podrías echar una mano?

Muchas gracias
Bego

Jota 2006
29 de Enero del 2006
Estimada Bego. ¿ que es eso de current of ?
He cambiado el procedure y ahora no da error, pruebalo y me cuentas.

Saludos

CREATE OR REPLACE PROCEDURE REEMPLAZAR_67(
cadena IN varchar2,
tabla IN varchar2
)
AS

pCompNo VARCHAR2(160);

ColumnCompNo VARCHAR2(200);


tmpcadena varchar2(20);
tmptabla varchar2(30);
tmpsql varchar2(200);

TYPE C IS REF CURSOR;
C1 C;
V_ROWID VARCHAR2(500);
BEGIN

tmptabla := tabla;
tmpcadena := cadena;
tmpsql := 'select ROWID,comp_no from ' || tmptabla || ' for update';

OPEN C1 FOR tmpsql;
LOOP
FETCH C1
INTO V_ROWID, pCompNo;
EXIT WHEN C1%NOTFOUND;


if SUBSTR(pCompNo,1,3)= '**1' then
ColumnCompNo := replace(pCompNo,'**13',tmpcadena);
else
ColumnCompNo := tmpcadena || substr(pCompNo,3);
end if;
dbms_output.put_line(ColumnCompNo );


tmpsql := 'UPDATE ' || tmptabla || ' SET COMP_NO = ' ||''''||ColumnCompNo||'''' ;
tmpsql := tmpsql || ' WHERE ROWID = '||''''||V_ROWID||'''';

dbms_output.put_line(tmpsql );
execute iMmediate (tmpsql);



END LOOP;
CLOSE C1;

END;

a
29 de Enero del 2006
jota, tu no eres muy listo, verdad??

Jota 2006
29 de Enero del 2006
Estimado a

Pche, pche.....

No mucho la verdad, un pelin mas que tu puta madre, pero no mucho ¿ eh ?, que ella en prostituirse es la reina y yo aqui solo hago lo que puedo, eso si, yo follo con garantias, así no les puedo pasar el SIDA a mis hijos , cosa que tu madre no tuvo en cuenta al follar con tanto drogata y chapero.


Espero haberte ayudado.

Saludos, estimado compañero