PDA

Ver la Versión Completa : Pasar Función de PL/pgSQL a SQL92


Zeta
15-12-2010, 22:30:35
Hola a todos, tengo escrita una función que hace lo siguiente:
1º busca el id de documentos
2º si no lo encuentra lo ingresa en el tabla documentos
3º ingresa en la tabla personal el nombre, id del tipo de documento(dada la descripción)) y nº doc.

El motivo: Pasarla a SQL porque el hosting postgres tiene solamente ese lenguaje

La Función:
CREATE OR REPLACE FUNCTION pruebas(varchar, varchar, integer)
RETURNS SETOF personal AS
$delimiter$
BEGIN
PERFORM id from documentos WHERE descripcion = $1;
IF NOT FOUND THEN
INSERT INTO documentos(descripcion) VALUES($1);
END IF;
INSERT INTO personal(nombre,idtipodocumento,numdoc)
VALUES($2,(SELECT id from documentos WHERE descripcion = $1),$3);
END;
$delimiter$
LANGUAGE plpgsql;


Tablas
documentos
CREATE TABLE documentos
(
id serial NOT NULL,
descripcion character varying(60),
CONSTRAINT pkdocumentos PRIMARY KEY (id)
)


personal
CREATE TABLE personal
(
id serial NOT NULL,
nombre character varying(60),
idtipodocumento smallint NOT NULL,
numdoc integer,
CONSTRAINT pkpersonal PRIMARY KEY (id),
CONSTRAINT fkpdoc FOREIGN KEY (idtipodocumento)
REFERENCES documentos (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE NO ACTION,
CONSTRAINT unqnumdoc UNIQUE (idtipodocumento, numdoc)
)

Zeta
16-12-2010, 16:43:47
Me respondo solo:

CREATE OR REPLACE FUNCTION pruebas(varchar, varchar, integer)
RETURNS void
AS
$delimiter$
INSERT INTO documentos(descripcion) SELECT $1
WHERE NOT EXISTS ( SELECT id FROM documentos WHERE descripcion = $1 );
INSERT INTO personal ( nombre, idtipodocumento, numdoc )
SELECT $2, ( SELECT id FROM documentos WHERE descripcion = $1 ), $3;
$delimiter$
LANGUAGE SQL;