Re: Ayuda sobre script & function

From: Alvaro Herrera <alvherre(at)surnet(dot)cl>
To: Julio Rivero <jcrmlima(at)gmail(dot)com>
Cc: pgsql-es postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda sobre script & function
Date: 2005-05-25 16:39:05
Message-ID: 20050525163905.GB8058@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Wed, May 25, 2005 at 11:15:52AM -0500, Julio Rivero wrote:
> Hola a todos, voy aprox. 3 meses con postgresql y tengo un problema, he
> creado una funcion para crear usuarios de acuerdo a los parametros que le
> paso a la funcion, como son usuario y contraseña, y cuando lo ejecuto para
> hacer una prueba me dice que CREATE USER no existe... estoy haciendo algo
> mal por ahi???,.. por favor si pudieran darme una mano:

Claro, el problema es que estas usando comillas dobles cuando deberias
estar usando comillas simples. No debes hacer

"CREATE USER " || ...

sino
'CREATE USER ' || ...

Ahora, al momento de crear una funcion, el asunto de las comillas se
complica porque el cuerpo mismo de una funcion va entre comillas. Por
lo tanto tienes que duplicarlas:

''CREATE USER '' || ...
Observa que son dos comillas simples, no una comilla doble.
Otra alternativa es usar demarcado de dolar:

CREATE FUNCTION .... AS $$

declare ...
...
vs_execute := 'CREATE USER ' || ...

$$;

El demarcado de dolar permite ahorrarte el lio de cuantas comillas
tienes que poner, etc. Tambien puedes hacer esto

CREATE FUNCTION .... AS $func$

declare ...
...
vs_execute := $s$CREATE USER $s$ || ...

$func$;

Lo importante de ver es que puedes usar demarcadores de dolar variables
para cada string donde usarias comillas. Como son distintos, no
necesitas "escaparlos" duplicando las comillas ni esas cosas
desagradables que los caballeros elegantes evitan.

Nota eso si que el demarcado de dolar esta disponible solo a partir de
Postgres 8.0, la version de los caballeros elegantes a la moda.

--
Alvaro Herrera (<alvherre[a]surnet.cl>)
"When the proper man does nothing (wu-wei),
his thought is felt ten thousand miles." (Lao Tse)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alexys Lozada 2005-05-25 16:39:44 Re: IPV6 o Local?
Previous Message Manuel Sugawara 2005-05-25 16:38:40 Re: Bloquear tablas