Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

[SOLUCIONADO] Function pl/pgsql

Estas en el tema de Function pl/pgsql en el foro de PostgreSQL en Foros del Web. Tengo la siguiente función y no logro concatenar los parámetros con la sentencia que deseo ejecutar. Espero puedan ayudarme: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original ...
  #1 (permalink)  
Antiguo 21/04/2015, 11:55
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Function pl/pgsql

Tengo la siguiente función y no logro concatenar los parámetros con la sentencia que deseo ejecutar. Espero puedan ayudarme:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION create_role(rolename CHARACTER VARYING,password CHARACTER VARYING)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.  
  6. BEGIN
  7.  
  8. CREATE ROLE $1 LOGIN ENCRYPTED PASSWORD $2 NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE;
  9. GRANT usercomun TO $1;
  10.  
  11. END;
  12.  
  13. $BODY$
  14.   LANGUAGE plpgsql;

El problema es que quiero crear un ROLE a través de esta función pasandole como parámetros el nombre y el password de el ROLE pero no se como hacer referencia dentro de la sentencia CREATE ROLE a los parámetros dados. Tengo error de sintaxis y no se como resolver.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 21/04/2015, 12:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Function pl/pgsql

Utiliza execute.

Código SQL:
Ver original
  1. EXECUTE 'CREATE ROLE $1 LOGIN ENCRYPTED PASSWORD $2 NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE';
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 21/04/2015, 12:53
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Function pl/pgsql

Muchas gracias por responder huesos52, pero me sigue dando el mismo error de sintaxis a la hora de utilizar la función por ejemplo de esta forma.

Código SQL:
Ver original
  1. SELECT create_role('nuevo_rol','12345')
  #4 (permalink)  
Antiguo 21/04/2015, 14:29
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Function pl/pgsql

Código sql:
Ver original
  1. EXECUTE 'create role '|| $1 || ' login encrypted password '|| $2 || ' nosuperuser inherit nocreatedb nocreaterole';

Prueba de esta forma. Ademas, se necesita saber cual es el error especificamente
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 21/04/2015, 14:46
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Function pl/pgsql

Esto es lo que ejecuto:

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION create_role(CHARACTER VARYING,CHARACTER VARYING)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.  
  6. BEGIN
  7.  
  8. EXECUTE 'create role '|| $1 || ' login encrypted password '|| $2 || ' nosuperuser inherit nocreatedb nocreaterole;
  9. GRANT usercomun to $1;';
  10.  
  11. END;
  12.  
  13. $BODY$
  14.   LANGUAGE plpgsql;
  15.  
  16. SELECT create_role('anguisi','120593')

El error ahora parece ser en el password.

ERROR: error de sintaxis en o cerca de «120593»
LINE 1: create role anguisi login encrypted password 120593 nosuperu...
^
QUERY: create role anguisi login encrypted password 120593 nosuperuser inherit nocreatedb nocreaterole;
GRANT usercomun to $1;
CONTEXT: función PL/pgSQL create_role(character varying,character varying) en la línea 6 en sentencia EXECUTE
********** Error **********

ERROR: error de sintaxis en o cerca de «120593»
SQL state: 42601
Context: función PL/pgSQL create_role(character varying,character varying) en la línea 6 en sentencia EXECUTE
  #6 (permalink)  
Antiguo 21/04/2015, 14:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Function pl/pgsql

Ahora intentalo asi

Código SQL:
Ver original
  1. EXECUTE 'create role '|| $1 || ' login encrypted password '''|| $2 || ''' nosuperuser inherit nocreatedb nocreaterole';
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 28/04/2015, 14:27
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Function pl/pgsql

Muchas gracias amigo, haz resuelto mi problema. Acepto que tengo problemas en cuanto a la sintaxis de pg/plsql aún. Te dejo tu punto.

Etiquetas: bases-de-datos-general, function, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:03.