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

Problema con función y RAISE NOTICE

Estas en el tema de Problema con función y RAISE NOTICE en el foro de PostgreSQL en Foros del Web. Estoy creando un sistema de ayuda a las funciones que he creado en la BD y ésta es la 1ª función que he creado: Código: ...
  #1 (permalink)  
Antiguo 24/08/2008, 10:09
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Problema con función y RAISE NOTICE

Estoy creando un sistema de ayuda a las funciones que he creado en la BD y ésta es la 1ª función que he creado:

Código:
CREATE FUNCTION ayuda_anadir_cliente () RETURNS void AS'
BEGIN
  RAISE NOTICE 'Los parametros de entrada son: DNI, Nombre, Apellidos, Dirección, Codigo postal, Población, Provincia';
END;
'LANGUAGE 'plpgsql';

Y el error que sale es:
ERROR: syntax error at or near "Los"
LINE 3: RAISE NOTICE 'Los parametros de entrada son: DNI, Nombre, ...
^

********** Error **********

ERROR: syntax error at or near "Los"
Estado SQL:42601
Caracter: 76
Pero por más que leo manuales y reviso el aviso, no consigo averiguar dónde he cometido el fallo garrafal...



SALU2
  #2 (permalink)  
Antiguo 24/08/2008, 10:27
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Lo he solucionado poniendo '' en vez de ' en el texto, por lo que queda:
Código:
CREATE FUNCTION ayudar_cliente () RETURNS void AS'
BEGIN
  RAISE NOTICE ''Los parametros de entrada son: DNI, Nombre, Apellidos, Dirección, Codigo postal, Población, Provincia'';
END;
'LANGUAGE 'plpgsql';
La cuestión es cómo hago para que salte el texto porque si pongo: "ayudar_cliente;", me sale el sigueinte error:
ERROR: syntax error at or near "ayudar_cliente"
LINE 1: ayudar_cliente;
^

********** Error **********

ERROR: syntax error at or near "ayudar_cliente"
Estado SQL:42601
Caracter: 1

SALU2
  #3 (permalink)  
Antiguo 25/08/2008, 02:13
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

No has leido mucho o no has leido donde debias:
http://www.postgresql.org/docs/8.3/i...e/plpgsql.html

Asi funciona:

Código:
CREATE FUNCTION ayudar_cliente () RETURNS void AS
$BODY$
BEGIN
  RAISE NOTICE 'Los parametros de entrada son: DNI, Nombre, Apellidos, Dirección, Codigo postal, Población, Provincia';
END;
$BODY$ LANGUAGE 'plpgsql';
Salu2
  #4 (permalink)  
Antiguo 25/08/2008, 05:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Pues debe ser que no entiendo nada :(

La diferencia entre la función que has puesto y la 2ª que puse son las comiilas simples después de AS y en el mensaje que hay que mostrar. Y me sigue dando el mismo fallo.

La aplicación que uso para gestionar el gestor de bases de datos es el pgadmin 3.


SALU2
  #5 (permalink)  
Antiguo 25/08/2008, 06:42
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

el codigo que te he puesto lo he probado antes, asi que funciona!
  #6 (permalink)  
Antiguo 25/08/2008, 07:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Crear se crea, pero ¿me puedes decir qué escribes exactamente para ejecutarla?
  #7 (permalink)  
Antiguo 26/08/2008, 14:02
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

Cita:
No has leido mucho o no has leido donde debias:
http://www.postgresql.org/docs/8.3/i...e/plpgsql.html
Creo que no has leido mucho....

select ayudar_cliente ();

Salu2
  #8 (permalink)  
Antiguo 27/08/2008, 00:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

seyko, ¿tengo que instalar alguna librería o algo?. Me estoy desmoralizando por momentos ¿qué gestor y qué versión del postgreSQL utilizas?

Le he preguntado a mi profesor, y me ha dicho que "la funciones en postgres las trata como si fuesen tablas" y me ha dicho que si quiero crear un sitema de ayuda a funciones, debería crear una tabla "ayuda" y crear atributos de tipo texto en le que ponga la ayuda que quiera mostrar, aunque me parece un poco cutre...

La aplicación que uso para gestionar el gestor de bases de datos es el pgadmin 3 y tlilizo el postgreSQL 8.1 como SGBD

Muchas gracias por la paciencia que tienes conmigo :)
  #9 (permalink)  
Antiguo 27/08/2008, 02:05
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

Bien, vamos por partes, que quieres hacer? que necesitas?

Te falla? Te da algun error?
Si no lo tienes instalado, tendrás que instalar el lenguaje plpgsql
http://www.postgresql.org/docs/8.1/i...elanguage.html

Salu2
  #10 (permalink)  
Antiguo 27/08/2008, 02:41
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Los programas que tengo instalados son:
  1. Toad Data Modeler 2.25 -> Para diseñar mi base de datos y crear las funciones, triggers, punteros y demás accesorios
  2. Pg Admin III 1.8.1 -> como gestor de la base de datos
  3. PostgreSQL 8.1 -> como lenguaje

Lo que quiero hacer es un diseño de ayuda de funcionamiento de las funciones, vamos, como cuando en MS-DOS ponías "help mkdir" o cualquier otro comando, que te aparece toda la finformación relativa a ese comando.

Como la BD tiene unas 16 funciones, había pensado que sería cómodo, que si no introduces bien los parámetros de entrada, no tener que ir a las especificaciones de la función sino introducir un comando y que te mostrara qué tienes que introducir.

Por ejemplo: Yo tengo mi tabla cliente con los siguientes atributos:
DNI
Nombre
Apellidos
Dirección
Codigo postal
Población
Provincia
Pues si el que está introdcuiendo los datos los ha metido mal, al ejecutar "help añadir cliente" que le diga que los parámetros a introducir son: "DNI, Nombre, Apellidos, Dirección, Codigo postal, Población, Provincia"

A la hora de hacer los experimentos, opté (como siempre hago), el crear en el pgadmin la tabla cliente (con todos sus atributos) y un par de funciones.

Cuando creo la función "ayudar_cliente" (tal como me dijiste) el programa me dice que la sentencia se ejecutó en 16 ms, vamos que está creada, pero cuando hago "SELECT ayudar_cliente ()", me da como resultado una celda vacía y no me muestra el texto de "RAISE NOTICE".

¿Qué es lo que hago mal?


SALU2
  #11 (permalink)  
Antiguo 27/08/2008, 07:12
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

..........
  #12 (permalink)  
Antiguo 27/08/2008, 07:12
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

select ayudar_cliente() --> devuelve vacio --> logico tu return es VOID.
Si lo ejecutas en consola veras el raise.
En el pgadmin tienes una pestaña llamada mensajes que te mostrara el mensaje.

Si lo que quieres es que falle la funcion RAISE EXCEPTION.
Dale una leida a los links que te mande y si tienes dudas o algun problema te ayudo.

Salu2
  #13 (permalink)  
Antiguo 27/08/2008, 07:56
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Si pongo EXCEPTION en vez de NOTICE, sí que sale en la pestaña de "mensajes":
Cita:
ERROR: Los parametros de entrada son: DNI, Nombre, Apellidos, Dirección, Codigo postal, Población, Provincia

********** Error **********

ERROR: Los parametros de entrada son: DNI, Nombre, Apellidos, Dirección, Codigo postal, Población, Provincia
Estado SQL:P0001
Si pongo NOTICE, en la pestaña de "mensajes":
Cita:
Tiempo total de ejecución de la consulta: 0 ms.
1 filas recuperadas.
Pero no aparece en ningún sitio el RAISE: ni en comentar, ni en mensajes, ni en historial. Lo único que aparece es en la pestaña de salida de datos, una celda vacía cuyo nombre es ayudar_cliente.
Cita:
Si lo ejecutas en consola veras el raise.
Lo que hago es desde el pgadmin, pincho en el icono de SQL e introduzco las órdenes, que supongo que será a lo que te refieres de "ejecutar desde consola"
  #14 (permalink)  
Antiguo 28/08/2008, 02:25
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

Ejecutar desde consola es ejecutar desde consola en modo comando --> psql.

Si no te saca el mensaje del NOTICE es configuración....
En postgresql.conf:
busca client_min_messages
y pon client_min_messages = notice

Este es el valor por defecto asi que alguien lo ha tocado.....

Salu2
  #15 (permalink)  
Antiguo 28/08/2008, 03:52
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Cita:
Iniciado por seyko Ver Mensaje
Ejecutar desde consola es ejecutar desde consola en modo comando --> psql.

Si no te saca el mensaje del NOTICE es configuración....
En postgresql.conf:
busca client_min_messages
y pon client_min_messages = notice

Este es el valor por defecto asi que alguien lo ha tocado.....

Salu2
Desde consola, el mesaje que me sale al poner "psql" (sin las comillas) es el siguiente:
Cita:
ERROR: syntax error at or near "psql"
LINE 1: psql
^

********** Error **********

ERROR: syntax error at or near "psql"
Estado SQL:42601
Caracter: 1
En el archivo postgresql.conf, encontré la siguiente instrucción:
# client_min_messages = 'notice' # Values, in order of decreasing detail:
Y la cambié por:
client_min_messages = notice # Values, in order of decreasing detail:
Desde consola escribo otra vez psql y me sale el mismo error. Escribo SELECT ayudar_cliente; y no me sale el notice por ningún lado, sino el error de siempre.

He optado por desintalar el pgadmin y el postgresql 8.1 y vovlerlos a instalar, pero salen los mismos fallos.

A la hora de instalar los prgramas, siempre dejo los valores por defecto (recomendaciones del profesor)
  #16 (permalink)  
Antiguo 28/08/2008, 04:32
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

Esto no tiene sentido, vamos por partes.
Version de postgresql?
Modulos de postgresql instalados?
Sistema Operativo?


ah psql es un programa de linea de comandos no es para que lo pongas dentro del fichero, es un COMANDO.
Si estas en windows -> Inicio -> ejecutar -> cmd -> te abre una CONSOLA y escribes psql -h host -d base_datos -U usuario
Si estas en linux.... no estas en linux porque sino tendrias claro lo que es una consola

Salu2
  #17 (permalink)  
Antiguo 28/08/2008, 06:14
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Tengo instalado lo siguiente:
PostgreSQL 8.1.10-1
Pg Admin III 1.8.1
No sé a qué te refieres con "Modulos de postgresql"

El SO es el Widows XP SP2 de 32 bits

Cuando he instalado el PostgreSQL 8.1, aparece en la carpeta el "Command Prompt". Lo ejecuto y voy a la consola :)

Según la ayuda que sale poniendo psql --help
-h -> database server host or socket directory (default: "local socket")
-d -> nombre de la base de datos. En mi caso postgres
-U -> nombre del usuario. En mi caso postgres
Para falicitarme la existencia, puse postgres en Account name y en Supername

¿Qué pongo en -h? En el pgadmin, hay me venta desplegable que pone: "postgres on postgres@localhost:5432"

He porbado a poner lo siguiente en la consola:
Cita:
psql -h postgres@localhost:5432 -d postgres -U postgres
Y me sale:
Cita:
"psql: coul not translate host name "postgres@localhost:5432" to address: Unknown host"
  #18 (permalink)  
Antiguo 28/08/2008, 06:45
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

Cita:
-h -> database server host or socket directory (default: "local socket")
host si la tienes instalada en local es localhost
Código:
psql -h localhost -d postgres -U postgres
Si me aceptas un consejo, deberias empezar con un tutorial basico, te veo bastante verde en el tema!
La documetación de postgres www.postgresql.org

Salu2
  #19 (permalink)  
Antiguo 28/08/2008, 07:23
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

Todos los consejos siempre son bien recibidos :) y sí, tienes toda la razón al decirme que estoy muy verde, pero en clase sólo nos explicaron:
  1. Cómo generar el script (con tablas, funciones, secuencias y demás elementos) desde el Toad Data Modeler y pasarlo al pgadmin.
  2. Cómo introducir los datos a pelo desde el pgadmin.
  3. Cómo introducir los datos a través de funciones creadas previamente.
  4. Cómo seleccionar tablas o valores según las restricciones que pusiéramos en las sentencias.

Realmente, lo que estoy haciendo no me piden que lo haga, pero me sentaría mal el haber tenido esta idea y no hacerlo. La práctica la tengo que presentar el 16 de septiembre y, aunque está terminada, me gustaría introducirle esta novedad :)

Una vez que he escrito la sentencia correctamente:
Cita:
psql -h localhost -d postgres -U postgres
Me aparece información sobre la versión y ciertos parámetros que me pudieran ser de ayuda. Pues bien, escribo:
Cita:
SELECT ayudar_cliente;
Y sí que aparece el NOTICE, pero no entiendo por qué no aparece en el pgadmin...
  #20 (permalink)  
Antiguo 29/08/2008, 02:45
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Problema con función y RAISE NOTICE

La verdad es que no lo se, pero tampoco he utilizado la version de windows de pgadmin, asi que no puede ayudarte en ese aspecto.
Ahora, necesitas algo más?

Salu2
  #21 (permalink)  
Antiguo 29/08/2008, 02:47
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

No, muchas gracias por todo :)
  #22 (permalink)  
Antiguo 05/09/2008, 10:21
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con función y RAISE NOTICE

El problema estaba en que no hay que poner acentos
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 12:34.