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)
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 |