Re: ALTER TABLE dentro de una función

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Juan Pablo Espino <jp(dot)espino(at)gmail(dot)com>
Cc: pgsql-es postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: ALTER TABLE dentro de una función
Date: 2005-01-27 19:57:55
Message-ID: 20050127195755.GA30463@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Thu, Jan 27, 2005 at 01:42:08PM -0500, Juan Pablo Espino wrote:
> Tengo una tabla llamada prueba y quisiera tener una función para
> añadirle una columna pasando como argumento el nombre de la tabla,
> suena sin sentido hacer eso, pero solo queria saber si eso se puede
> hacer. Entonces tengo lo siguiente:
>
> CREATE FUNCTION añadir_columna(text) RETURNS integer AS $$
> DECLARE
> cadena ALIAS FOR $1;
> BEGIN
> ALTER TABLE cadena
> ADD COLUMN Nueva_Columna varchar(20);
> RETURN NULL;
> END;
>
> $$ LANGUAGE plpgsql;
>
> cuando hago select añadir_columna(prueba) me sale:
> ERROR: column "prueba" does not exist

En general no tiene sentido (y es un error de diseño), pero si eres muy
tozudo puedes intentar con EXECUTE:

CREATE FUNCTION añadir_columna(text) RETURNS void AS $$
DECLARE
cadena ALIAS FOR $1;
otra_cadena TEXT;
BEGIN
otra_cadena := 'ALTER TABLE ' || cadena || ' ADD COLUMN Nueva_Columna varchar(20)';
EXECUTE otra_cadena;
return;
END;

$$ LANGUAGE plpgsql;

(no he probado si funciona pero algo asi)

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"Postgres is bloatware by design: it was built to house
PhD theses." (Joey Hellerstein, SIGMOD annual conference 2002)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2005-01-27 20:00:48 Re: Programación del lado del servidor
Previous Message ALEXIS MORENO 2005-01-27 19:54:36 Re: Sugerencia