Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-12-2010
Avatar de Zeta
Zeta Zeta is offline
Miembro
 
Registrado: feb 2005
Posts: 215
Poder: 20
Zeta Va por buen camino
Post 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)
)
__________________
And I'd like an hour on the holodeck with Seven of Nine.
Responder Con Cita
  #2  
Antiguo 16-12-2010
Avatar de Zeta
Zeta Zeta is offline
Miembro
 
Registrado: feb 2005
Posts: 215
Poder: 20
Zeta Va por buen camino
Talking

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;
__________________
And I'd like an hour on the holodeck with Seven of Nine.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Funcion ABS brandolin SQL 5 24-01-2009 14:53:38
pasar un puntero a una funcion baby Varios 2 21-05-2007 13:10:22
IB/FB o MySQL/PgSQL/Oracle...? OSKR Firebird e Interbase 7 27-08-2005 21:43:58
Funcion para pasar de minutos a horas Asshole Varios 1 13-06-2005 13:23:27
Pasar como parametro el where en una funcion cso2000 MS SQL Server 2 15-02-2005 02:49:47


La franja horaria es GMT +2. Ahora son las 17:35:01.


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
Copyright 1996-2007 Club Delphi