Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-04-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
matrices en firebird

Hola amigos del foro, mi inquietud hoy es sobre las matrices en firebird, si es posible declarar una variable de ese tipo y cómo se hace... O si es necesario crear una pequeña tabla temporal para que haga esa función.

Nuevamente un millón de gracias por el tiempo que invierten en visitar y responder las preguntas de personas que como yo están en la tarea de aprender nuevas cosas.


Afectuosamente,

Gustavo Cruz
Responder Con Cita
  #2  
Antiguo 02-04-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Tipo, como de "tipos array" en Firebird no he visto aún, pero como bien dices... puedes utilizar alguna tabla temporal (Que si mal no recuerdo tu usas FB 2.1), entonces podrias hacerlo de la forma como lo explico someramente en el punto 3 del articulo "Lo nuevo de Firebird 2.1".
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 13-04-2009
jconnor82 jconnor82 is offline
Miembro
 
Registrado: feb 2008
Posts: 22
Poder: 0
jconnor82 Va por buen camino
Ahora estaba buscando informacion sobre arrays en firebird (uso la 2.5) aunq en anteriores tambien se ecuentra esta informacion

la forma en la cual los implemento es

Código SQL [-]
CREATE DOMAIN D_ARRAY_TEXT AS VARCHAR(20)[4];

donde VARCHAR(20) es el tipo de elementos
[4] las dimensiones de arreglo
[m, n] en caso de ser bidimensional

si se quiere usar como campo de un tabla el modo de asignar esta en USING ARRAYS IN PSQL, otros ejemplos de usos en firebird con FIBPlus estan en sus ejemplos.

ahora si les pongo mi consulta, estoy intentado hacer un procedimiento en el cual paso un parametro como arreglo, el problema esta en como leer el arreglo ingresado

Código SQL [-]
/* Dominio creado */

CREATE DOMAIN D_ARRAY_TEXT AS VARCHAR(20)[4];

...

SET TERM ^ ;

CREATE OR ALTER PROCEDURE BUSCADOR (
  P_NOMBRES TYPE OF D_ARRAY_TEXT )
RETURNS (
  RECORDS_FOUND INTEGER )
AS
  DECLARE NOMBRE1 VARCHAR(20);
  DECLARE NOMBRE2 VARCHAR(20);
  DECLARE NOMBRE3 VARCHAR(20);
  DECLARE NOMBRE4 VARCHAR(20);
BEGIN
  NOMBRE1 = P_NOMBRES[1];
  NOMBRE2 = P_NOMBRES[2];
  NOMBRE3 = P_NOMBRES[3];
  NOMBRE4 = P_NOMBRES[4];

  SELECT
    COUNT(*)
  FROM
    USUARIOS
  WHERE
    (:NOMBRE1 IS NULL OR NOMBRE LIKE '%' || :NOMBRE1 || '%')
    AND (:NOMBRE2 IS NULL OR NOMBRE LIKE '%' || :NOMBRE2 || '%')
    AND (:NOMBRE3 IS NULL OR NOMBRE LIKE '%' || :NOMBRE3 || '%')
    AND (:NOMBRE4 IS NULL OR NOMBRE LIKE '%' || :NOMBRE4 || '%')
  INTO :RECORDS_FOUND;
  SUSPEND;
END^

SET TERM ; ^

si alguien tiene informacion de como usarlos en psql, agradeceria su ayuda.
Responder Con Cita
  #4  
Antiguo 13-04-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Interesante, a simple vista parece que no hay mucha documentación al respecto, pero pues a leer y probar se dijo .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 13-04-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Según parece, en PSQL no es posible declarar un array directamente, incluso, tampoco es posible hacerlo declarando una variable del tipo "dominio" que a su vez sea un arreglo (Tal y cual como tratas de hacerlo en el ejemplo que nos muestras), pues el PSQL no tiene en cuenta el arreglo de dicho dominio, si no solamente el tipo y nada mas.

Incluso en el Link que nos muestras, mencionan eso, pues aunque si es posible hacer referencia a un dato que se encuentra en un arreglo (Alojado en una tabla por ejemplo), el PSQL aún no soporta los arreglos como su tipo de dato.

De todas formas en lo que a mi concierne, estaré al tanto de dicha característica, pues siendo esta incluida en el PSQL, sería una caracteristica bastante interesante. Sin embargo seguire buscando alguna alternativa, a ver si la encuentro (Aunque la verdad lo dudo por el momento)... jconnor82, si tu encuentras la manera de hacerlo, creo que sería bastante útil que nos lo comentaras .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 13-04-2009
jconnor82 jconnor82 is offline
Miembro
 
Registrado: feb 2008
Posts: 22
Poder: 0
jconnor82 Va por buen camino
Es cierto no he podido acceder al array usando el indice, espero y haya una funcion que permita trabajar con ellos porque cuando se accede por campo de tabla si que se puede hacer, cito una parte del libro The Firebird eBook

Limited Dynamic SQL Access
The following example is a simple demonstration of how a DSQL application can get limited read access to an array slice through a stored procedure:
Código SQL [-]
create procedure getcharslice(
  low_elem smallint, high_elem smallint)
returns (id integer, list varchar(50))
as
  declare variable i smallint;
  declare variable string varchar(10);
begin
  for select a1.ID from ARRAYS a1 into :id do
  begin
    i= low_elem;
    list = '';
    while (i <= high_elem) do
    begin
      select a2.CHARARRAY[:i] from arrays a2
      where a2.ID = :id
      into :string;
      list = list||string;
      if (i < high_elem) then
      list = list||',';
      i = i + 1;
    end
    suspend;
  end
end
donde la tabla array es de esta forma:
Código SQL [-]
CREATE TABLE ARRAYS
(ID BIGINT,
CHARARRAY CHAR(14)[8]);
Responder Con Cita
Respuesta



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
Juegos con matrices huwabe78 OOP 11 14-12-2007 19:03:15
matrices finees Varios 5 15-11-2006 01:52:27
Matrices sergio_015 OOP 3 09-03-2005 19:53:07
Matrices mmtaffarel OOP 2 15-10-2004 03:19:27
Matrices - problemas..... arieleb Varios 1 21-09-2003 12:30:35


La franja horaria es GMT +2. Ahora son las 16:36:31.


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