From: | Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Desencriptar Registros y pasar a otra |
Date: | 2007-02-20 14:25:39 |
Message-ID: | 598383.44852.qm@web52103.mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Maestros, les paso un codigo, puede que les sirva a los primerizos como yo.
La idea es sacar los registros de "Recibidas" de un determinado usuario (Depta) desencriptar un campo y meterlos en la tabla "RecibidasDes".
Si alguno tiene una propuesta diferente si lo agradecere.
No me criitiquen las cadenas del EXECUTE, ya se que es una chanchada pero asi me anduvo...
Lo que no estoy seguro es el error que puse en exception en la funcion DesencriptaDepta, lo que quiero es devolver falso si ocurrio cualquier error.
Por las dudas les explico un poco mas, los usuarios mandan a la tabla "Recibidas" la info (desde VB6) y con un programa VB6 cada tanto yo y solo yo desde el server debo desencriptar y mandar a la tabla RecibidasDes para luego procesar esa informacion. Ademas les comento que el campo Sumario tiene las dos primeras letras que idnetifican al usario asi que no hay problemas de bloqueos entre usuarios, lo que debo asegurar es que no ejecute el programa que esta en el servidor cuando justo un usuario esta mandando datos, por eso el programa del server debe bloquear en la tabla de recepcion los registros de ese usuario.
CREATE OR REPLACE FUNCTION byteatext(bytea)
RETURNS text AS
$BODY$
begin
return $1;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
CREATE OR REPLACE FUNCTION istablalock(text,text,text)
RETURNS BOOL
-- devuelve verdadero si la tabla esta bloqueada
-- el %1 es la tabla
-- el %2 es el campo que donde debo buscar la cadena
-- el %3 es el valor de la cadena a buscar
LANGUAGE plpgsql
VOLATILE
STRICT
AS
$gsm$
BEGIN
EXECUTE 'SELECT 1 FROM '||quote_ident($1) ||' WHERE '
||quote_ident($2)||' LIKE \''||$3||'\' FOR UPDATE NOWAIT';
RETURN FALSE;
EXCEPTION WHEN lock_not_available THEN
RETURN true;
END;
$gsm$;
CREATE OR REPLACE FUNCTION DesencriptaDepta("Depta" character(2), "clave" bytea)
RETURNS BOOL AS
$BODY$
DECLARE
clave ALIAS FOR $2;
Depta ALIAS FOR $1;
a character varying(50);
BEGIN
IF istablalock('Recibidas') then
return FALSE;
ELSE
LOCK TABLE "Recibidas" IN SHARE ROW EXCLUSIVE MODE;
a= byteatext(clave);
execute 'DELETE FROM "RecibidasDes" where "Sumario" IN (SELECT "Sumario" FROM "Recibidas" WHERE "Sumario" LIKE \''||Depta||'%\');';
execute 'INSERT INTO "RecibidasDes" SELECT "Sumario", "TipoInfo",ByteaText(decrypt("Info",\''||a||'\',\'bf\')) FROM "Recibidas" WHERE "Sumario" LIKE \''||Depta||'%\';';
END IF;
EXCEPTION WHEN sql_statement_not_yet_complete THEN
--en caso de error retorna falso
RETURN FALSE;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Saludossss
__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas
From | Date | Subject | |
---|---|---|---|
Next Message | Mario | 2007-02-20 14:31:32 | Re: Desencriptar Registros y pasar a otra |
Previous Message | Edwin Quijada | 2007-02-20 14:24:52 | RE: ayuda |