Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-07-2013
pame pame is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 6
Poder: 0
pame Va por buen camino
Error al emplearuna funcion

Buenas tardes, tengo el siguiente problema, para el cual solicito su ayuda Gracias.. cuando empleo esta funcion en postgres
Código SQL [-]
CREATE OR REPLACE FUNCTION eoq(fi date, ff date)
  RETURNS SETOF record AS
$BODY$
  SELECT
    DISTINCT a.cod_producto,
    p.nombre,
    SUM(a.cantidad) / ($2 - $1)             AS demanda,
    (2 * 75 * SUM(a.cantidad) / ($2 - $1)) /(p.precio_unid * 0.13)    AS Q,
    (SUM(a.cantidad) / ($2 - $1)) /
    (2 * 75 * SUM(a.cantidad) / ($2 - $1)) /(p.precio_unid * 0.13)    AS N,
    (2 * 75 * SUM(a.cantidad) / ($2 - $1)) / (p.precio_unid * 0.13)/(SUM(a.cantidad) / ($2 - $1))           AS T,
    Stddev(a.cantidad) * sqrt(4)            AS Desv,
    (Stddev(a.cantidad) * sqrt(4)) * 1.28   AS IS,
    SUM(a.cantidad) / ($2 - $1) * 4 *((Stddev(a.cantidad) * sqrt(4)) * 1.28) AS R

  FROM detalle_venta a, factura_vent fv, producto p

  WHERE ((p.cod_producto = a.cod_producto) AND (a.cod_fact_vent = fv.cod_fact_vent) AND
         (fv.fecha BETWEEN $2 AND $1))
  GROUP BY a.cod_producto, p.nombre, p.precio_unid 
  $BODY$
  LANGUAGE sql VOLATILE 
  COST 100
  ROWS 1000;
ALTER FUNCTION eoq(date, date) OWNER TO postgres;
y la ejecuto mediante un TADOStoreProc, con un DataSource y un TDBGrid en delphi me sale el siguiente error
Cita:
error se requiere una lista de definición de columnas para funciones que retornan «record»
Por favor agradecere su ayuda
MUCHAS GRACIAS
Responder Con Cita
  #2  
Antiguo 31-07-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola,

Cuando creas una función que retorne un SETOF RECORD solo le estás diciendo que va a regresar un conjunto de datos pero sin ninguna estructura y por eso aún llamándolo desde PgAdmin te generará ese error.

Para que no genere este error, deberás establecer la definición de los campos al llamar la función. Pero en este caso deberás usar un componente de consulta TAdoQuery en lugar de usar el componente de procedimiento almacenado.

Código SQL [-]
select * from funcion(a, b) as (a int, b text, c numeric, ...)

Otra opción (que nunca he probado) es crear una vista con la estructura que piensas devolver y en RETURNS colocar la vista

Código SQL [-]
CREATE OR REPLACE FUNCTION eoq(fi date, ff date)
  RETURNS SETOF "public"."vistaEOQ" AS
$BODY$
..
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error en la funcion Right en firebird uper Firebird e Interbase 4 06-05-2013 21:12:52
Error en Función de DLL orlando9427 Varios 0 06-04-2011 00:37:17
error en funcion diego007 Varios 4 03-03-2010 02:25:29
Error con funcion astut Varios 4 17-09-2006 15:47:04


La franja horaria es GMT +2. Ahora son las 00:15:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi