pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: serviciotdf <serviciotdf@gmail.com>
To: pgsql-sql@postgresql.org
Subject: Re: Translate Function PL/pgSQL to SQL92
Date: Fri, 17 Dec 2010 12:26:30 -0300
Message-ID: <4D0B8126.1040300@gmail.com> (raw)
In-Reply-To: <AANLkTim3UH9Vbeva0TVhKBtyfUjeTCncjLMCv5nQRrXe@mail.gmail.com>
References: <4D0969C4.5050205@gmail.com>
	<AANLkTim3UH9Vbeva0TVhKBtyfUjeTCncjLMCv5nQRrXe@mail.gmail.com>

Perfect!

The query worked fine!

Answer:

###
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;
###

Thanks Filip!

Marcelo

El 16/12/10 08:17, Filip Rembiałkowski escribió:
>
> 2010/12/16 serviciotdf <serviciotdf@gmail.com 
> <mailto:serviciotdf@gmail.com>>
>
>     Hello,
>
>     I have a Function in PL/pgSQL and I need to translate it to SQL92,
>     but I'm stuck.
>
>     ###
>     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;
>     ###
>
>     Tables
>
>     CREATE TABLE documentos
>      id serial NOT NULL,
>      descripcion character varying(60),
>      CONSTRAINT pkdocumentos PRIMARY KEY (id)
>
>
>     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)
>
>
>
> If I understand correctly, you mean translating this function into a 
> sequence of plain SQL commands:
>
> 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;
>
> of course you will need to bind / pass parameters...
>
> HTH
>
> Filip
>

view thread (3+ messages)

Message-ID: <4D0B8126.1040300@gmail.com>
Permalink:  ../4D0B8126.1040300@gmail.com/
Also on:    postgresql.org/message-id/4D0B8126.1040300@gmail.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: serviciotdf@gmail.com
  Subject: Re: Translate Function PL/pgSQL to SQL92
  In-Reply-To: <4D0B8126.1040300@gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox