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

Error en creación de store procedure

Estas en el tema de Error en creación de store procedure en el foro de PostgreSQL en Foros del Web. Buenas a todos, soy nuevo es postgres y estoy haciendo un procedimiento almacenado para que dependiendo del resultado del select, este retorne un valor, para ...
  #1 (permalink)  
Antiguo 30/01/2012, 14:18
Avatar de ej1
ej1
 
Fecha de Ingreso: enero-2012
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 12 años, 2 meses
Puntos: 0
Pregunta Error en creación de store procedure

Buenas a todos, soy nuevo es postgres y estoy haciendo un procedimiento almacenado para que dependiendo del resultado del select, este retorne un valor, para luego insertarlo en una tabla, pero ni siquiera he podio insertar pues tengo errores en el retorno del valor, este es el código:


CREATE OR REPLACE FUNCTION ejemplo_txt() RETURNS text AS $$
DECLARE


respuesta_retorno TEXT DEFAULT 'Estatus activo';

BEGIN


respuesta := Select
to_char(age (current_date, fecha_inicio),'dd') AS dif
From
empleado_historico;





IF respuesta <> '0' THEN
respuesta_retorno := 'Estatus inactivo';
END IF;

RETURN respuesta_retorno;
END;
$$ LANGUAGE plpgsql;



Alguna sugerencia?
  #2 (permalink)  
Antiguo 30/01/2012, 15:20
Avatar de ej1
ej1
 
Fecha de Ingreso: enero-2012
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Error en creación de store procedure

Bueno ya me genera la funcion, solo no debia igualar el select:

CREATE OR REPLACE FUNCTION ejemplo_txt() RETURNS text AS $$
DECLARE


resultado_txt TEXT DEFAULT 'Estatus activo';

BEGIN




Select
to_char(age (current_date, fecha_inicio),'dd') AS dif
From
empleado_historico;





IF dif <> '0' THEN
resultado_txt := 'Estatus inactivo';
END IF;

RETURN resultado_txt;
END;
$$ LANGUAGE plpgsql;

Lo que pasa ahora es que me produce un error a la hora de convocar la funcion de la forma SELECT ejemplo_txt(); el error es el siguiente:

ERROR: la consulta no tiene un destino para los datos de resultado
SUGERENCIA: Si quiere descartar los resultados de un SELECT, utilice PERFORM.
CONTEXTO: función PL/pgSQL «ejemplo_txt» en la línea 11 en sentencia SQL

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

ERROR: la consulta no tiene un destino para los datos de resultado
SQL state: 42601
Hint: Si quiere descartar los resultados de un SELECT, utilice PERFORM.
Context: función PL/pgSQL «ejemplo_txt» en la línea 11 en sentencia SQL




Alguina sugerencia?
  #3 (permalink)  
Antiguo 30/01/2012, 17:48
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Error en creación de store procedure

Hola que tal, revisa con esto:

Código PostgreSQL:
Ver original
  1. CREATE OR REPLACE FUNCTION ejemplo_txt()
  2.   RETURNS VARCHAR(5000) AS
  3. $BODY$
  4.     DECLARE
  5.  
  6.         resultado_txt VARCHAR(2000);
  7.  
  8.     BEGIN
  9.  
  10.         resultado_txt:= 'Estatus activo';
  11.  
  12.         Select to_char(age (current_date, fecha_inicio),'dd') AS dif
  13.         From empleado_historico;
  14.  
  15.         IF dif <> '0' THEN
  16.             resultado_txt := 'Estatus inactivo';
  17.         END IF;
  18.  
  19.     RETURN resultado_txt;
  20.     END;
  21. $BODY$
  22. LANGUAGE 'plpgsql' VOLATILE;

Para el select lo puedes hacer asi:

SELECT * FROM ejemplo_txt();
o
SELECT ejemplo_txt();


Última edición por drako_darpan; 30/01/2012 a las 17:54
  #4 (permalink)  
Antiguo 01/02/2012, 10:25
Avatar de ej1
ej1
 
Fecha de Ingreso: enero-2012
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Error en creación de store procedure

La propuesta que me hicistes no me resulto, me ha salido este error:


ERROR: error de sintaxis en o cerca de «*»
LÍNEA 2: * RETURNS VARCHAR(5000) AS
^


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

ERROR: error de sintaxis en o cerca de «*»
SQL state: 42601
Character: 43


He probado cambiando palabras, tambien pense que faltaban comillas entre el primer $BODY$ y el ultimo, pero nada siguen saliendo errores, por cierto no mencione la version de mi postgresql, es la 8.4.9, esto puede tener que ver...
  #5 (permalink)  
Antiguo 02/02/2012, 10:15
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Error en creación de store procedure

Hola que tal, pue si esta raro, yo lo acabo de revisar y me funciono:

Código PostgreSQL:
Ver original
  1. CREATE OR REPLACE FUNCTION ejemplo_txt()
  2.       RETURNS VARCHAR(5000) AS
  3.     $BODY$
  4.         DECLARE
  5.      
  6.             resultado_txt VARCHAR(2000);
  7.        dif            INT4;
  8.      
  9.         BEGIN
  10.      
  11.             resultado_txt:= 'Estatus activo';
  12.        dif := 1;
  13.      
  14.      
  15.             IF dif <> '0' THEN
  16.                 resultado_txt := 'Estatus inactivo';
  17.             END IF;
  18.      
  19.         RETURN resultado_txt;
  20.         END;
  21.     $BODY$
  22.     LANGUAGE 'plpgsql' VOLATILE;
  23.  
  24. SELECT ejemplo_txt();
  25.  
  26. SELECT * FROM ejemplo_txt();

La version del postgre puede ser yo lo estoy revisando en una version 8.4.1
  #6 (permalink)  
Antiguo 06/02/2012, 07:56
Avatar de ej1
ej1
 
Fecha de Ingreso: enero-2012
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Error en creación de store procedure

Gracias por tu respuesta disculpa que tarde en responder pues me ataco un virus humano y bueno estuve medio mal la semana pasada;
probe el codigo y me funciono, faltaba este codigo dif INT4;
Bueno mi idea final del codigo es que compare una fecha y me arroje el resultado, entonces lo he estado transformando pero siempre sale un error, este es el codigo:





CREATE OR REPLACE FUNCTION ejemplo_txt(fecha_inicio date)

RETURNS VARCHAR(5000) AS
$BODY$
DECLARE

resultado_txt VARCHAR(2000);
--dif INT4;
dif date;

BEGIN

resultado_txt:= 'Estatus activo';

--dif := 1;

dif:= Select
to_char(age (current_date, fecha_inicio),'dd') AS valor
From
empleado_historico;

IF dif <> '0' THEN

resultado_txt := 'Estatus inactivo';
END IF;
RETURN resultado_txt;

END;

$BODY$
LANGUAGE 'plpgsql' VOLATILE;




Alguna sugerencia?
  #7 (permalink)  
Antiguo 06/02/2012, 09:35
Avatar de ej1
ej1
 
Fecha de Ingreso: enero-2012
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 12 años, 2 meses
Puntos: 0
Busqueda Respuesta: Error en creación de store procedure

Buenas creo que mejore el codigo, pero ahora me sale el siguiente error:

ERROR: el registro «fecha_inicio» no ha sido asignado aún
DETALLE: La estructura de fila de un registro aún no asignado no está determinado.
CONTEXTO: función PL/pgSQL «ej3» en la línea 14 en sentencia SQL


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

ERROR: el registro «fecha_inicio» no ha sido asignado aún
SQL state: 55000
Detail: La estructura de fila de un registro aún no asignado no está determinado.
Context: función PL/pgSQL «ej3» en la línea 14 en sentencia SQL


Es raro ya que la variable la declare, aqui esta el codigo:

CREATE OR REPLACE FUNCTION ejemplo_txt()

RETURNS VARCHAR(5000) AS
$BODY$
DECLARE

resultado_txt VARCHAR(2000);

fecha_inicio record;

BEGIN

resultado_txt:= 'Estatus activo';




Select
to_char(age (current_date, fecha_inicio),'dd') AS fecha_diferencia
From
empleado_historico;

IF fecha_diferencia<'0' OR fecha_diferencia=='0' THEN

resultado_txt := 'Estatus inactivo';
END IF;
RETURN resultado_txt;

END;

$BODY$
LANGUAGE 'plpgsql' VOLATILE;





Sugerencias?
  #8 (permalink)  
Antiguo 06/02/2012, 13:18
Avatar de ej1
ej1
 
Fecha de Ingreso: enero-2012
Ubicación: Venezuela
Mensajes: 6
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Error en creación de store procedure

Ah otra cosa que le cambie es
Select
to_char(age (current_date, fecha_inicio),'dd')::number AS fecha_diferencia
From
empleado_historico;


Asi puedo compararlo menor a cero
  #9 (permalink)  
Antiguo 17/02/2012, 03:25
 
Fecha de Ingreso: agosto-2011
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Error en creación de store procedure

Hola me llamo Leticia Gabandé y soy Técnico de RRHH.
Actualmentee stamos bsucando gente que sepan de Oracle,PL/SQL, ASP y VB para trabajar en una importante empresa de la zona de mIrasierra (Madrid) es a jornada completa de 9 a 6 y es algo estable . Las tareas serán hacer analisis de requeriientos y de manuales destinados a desarrollos de metodologías, así como valorar las necesidades del cliente (proyectos de banca) . Por otro lado,esta persona estará a cargo de un equipo de programadores y administradores al que tendrá que supervisar para corregir o subsanar errores en la arquitectura de la aplicación/es desarrolladas.

El salario está en torno a los 30-35.000 Brutos anales en función de la experiencia del candidato. Necesitamso uan persona que haya trabajado en este ámbito mínmo unos dos años.


los Interesados pongánse en contacto conmigo en [email protected]

Etiquetas: creación, end, postgres, procedimiento, procedure, select, sql, store
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 22:15.