Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
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 06-03-2007
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
Question PLSQL - Pasar un array como parametro.

Hola a todos.

estoy usando PostgreSQL 8.1 y he creado una funcion algo así :

Código SQL [-]
CREATE FUNCTION "public"."fn0" (prm0 varchar, prm1 integer []) RETURNS integer AS
$body$
DECLARE
BEGIN
  -- AQUI HAGO ALGO CON ESE ARRAY.
  RETURN NULL;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;


esto para manejar un conjunto de líneas que he recopilado en un StringGrid despues de 4 consultas distintas y permitir la edición por parte del usuario.

podria procesar estas líneas una por una... pero entoces la ejecución dependeria de delphi y si a medio camino hay un error de programación o se corta el suministro de energia?

Entonces quiero pasarlo como un procedimiento para que la ejecución dependa de PostgreSQL . Pero quisiera pasar TODAS las líeas de mi StringGrid a la función y no una por una (muy parecido seria hacer consultas desde delphi )
Si tengo los siguientes datos:

Volante de venta : 0001

ProductoID,ProductoNom,ProductoVal
1,nombreproducto1,valorproducto1
2,nombreproducto2,valorproducto2
3,nombreproducto3,valorproducto3
4,nombreproducto4,valorproducto4

quisiera hacer algo como :

select public.fn0('VolanteNo', (codprod1, codprod2, codprod3, codprod4))

pero cuando hago esto, me dice:
Código SQL [-]
ERROR:  function public.fn0(character varying, record) does not exist
HINT:  No function matches the given name and argument types. You may need to add explicit type casts.

y lo he intentado de varias maneras, he buscado un resto por la web, he leido la documentación y no se si me patina el coco o es que estoy mas rayao que el tablero de mi escuela primaria pero NO LOGRO ENCONTRAR SOLUCION.

Please!!!! alguien que me ayude.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #2  
Antiguo 06-03-2007
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
Que chevere!!!!

Bueno mi gente... la busqueda en realidad fué extenuante pero lo CONSEGUI!!!!, lo encontre, lo hallé, está conmigo, es inherente a mi.

esta es la solución:

Código SQL [-]
Select public.foo('{2,4,6,8,10,12,14,16,18,20,22,24,26,28,30}'::integer[])

para este ejemplo, hice algunas pruebas y cree una función así:

Código SQL [-]
CREATE OR REPLACE FUNCTION "public"."foo" (var1 integer []) RETURNS integer AS
$body$
DECLARE
 i INTEGER;
 var1_size INTEGER;
BEGIN
  var1_size := substring(substring(array_dims(var1), 4), 1,strpos(substring(array_dims(var1), 4), ']')-1)::INTEGER;
  FOR i IN 1..var1_size LOOP
    RAISE NOTICE '% - VALOR: %', i, var1[i];
  END LOOP;
  RETURN NULL;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

lo que al ejecutar la primera porción de código me devuelve:

NOTICE: 1 - VALOR: 2
NOTICE: 2 - VALOR: 4
NOTICE: 3 - VALOR: 6
NOTICE: 4 - VALOR: 8
NOTICE: 5 - VALOR: 10
NOTICE: 6 - VALOR: 12
NOTICE: 7 - VALOR: 14
NOTICE: 8 - VALOR: 16
NOTICE: 9 - VALOR: 18
NOTICE: 10 - VALOR: 20
NOTICE: 11 - VALOR: 22
NOTICE: 12 - VALOR: 24
NOTICE: 13 - VALOR: 26
NOTICE: 14 - VALOR: 28
NOTICE: 15 - VALOR: 30

comparditos... gracias... la soulción era realizar un TypeCast a la cadena que paso en la consulta y listo.

bueno... muchas gracias y bendiciones a todos.
__________________
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
Pasar Matriz como parametro a un procedimiento Caro Varios 2 28-07-2006 18:20:12
Pasar como parametro un objeto 'calculado' gluglu Varios 2 20-07-2006 11:26:30
pasar como parametro arrayq nenufer Varios 3 27-04-2006 17:43:13
pasar como parámetro un array bidimensional nsr048 Varios 2 08-11-2005 12:54:20
Pasar como parametro el where en una funcion cso2000 MS SQL Server 2 15-02-2005 03:49:47


La franja horaria es GMT +2. Ahora son las 23:20:36.


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