Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   Pasar Función de PL/pgSQL a SQL92 (https://www.clubdelphi.com/foros/showthread.php?t=71377)

Zeta 15-12-2010 22:30:35

Pasar Función de PL/pgSQL a SQL92
 
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:
Código SQL [-]
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
Código SQL [-]
CREATE TABLE documentos
(
  id serial NOT NULL,
  descripcion character varying(60),
  CONSTRAINT pkdocumentos PRIMARY KEY (id)
)


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

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


La franja horaria es GMT +2. Ahora son las 16:40:28.

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