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

error en matriz

Estas en el tema de error en matriz en el foro de PostgreSQL en Foros del Web. hola a todos estoy tratando de hacer esta funcion Cita: create or replace function pa_validaruc(xruc text) RETURNS integer AS $BODY$ DECLARE i integer; residuo integer; ...
  #1 (permalink)  
Antiguo 02/11/2010, 18:39
 
Fecha de Ingreso: septiembre-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 1
error en matriz

hola a todos estoy tratando de hacer esta funcion


Cita:
create or replace function pa_validaruc(xruc text)
RETURNS integer AS
$BODY$
DECLARE
i integer;
residuo integer;
ultdigito integer;
aruc integer[][];
BEGIN
if length(xruc)<>11 then
return 0;
end if;
FOR i IN 0..10 LOOP
aruc[0][i]:=cast(substring(xruc,i+1,1) as integer);
END LOOP;
RETURN 1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
pero cuando ejecuto
SELECT pa_validaruc('10141401538');

me sale este error:
ERROR: los subíndices de arrays están fuera de rango
CONTEXT: PL/pgSQL function "pa_validaruc" line 11 at asignación

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

ERROR: los subíndices de arrays están fuera de rango
SQL state: 2202E
Context: PL/pgSQL function "pa_validaruc" line 11 at asignación

al parecer el error esta en esta linea:
aruc[0][i]:=cast(substring(xruc,i+1,1) as integer);

pero no encuentro la forma de arreglarlo, les agradeceria una manito

atte

edwinsp
  #2 (permalink)  
Antiguo 02/11/2010, 21:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: error en matriz

En los arreglos de plpgsql los arrays empiezan en 1 y no en cero.

prueba y nos cuentas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 03/11/2010, 08:46
 
Fecha de Ingreso: septiembre-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: error en matriz

te comento que hice el siguiente cambio

Cita:
FOR i IN 1..11 LOOP
aruc[0][i]:=cast(substring(xruc,i,1) as integer);
END LOOP;
pero me sigue botando el mismo error

atte
  #4 (permalink)  
Antiguo 03/11/2010, 08:53
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: error en matriz

Cita:
aruc[0][i]:=
ahí estas llamando la posicion 0. Cambia eso por un 1.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 03/11/2010, 09:11
 
Fecha de Ingreso: septiembre-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: error en matriz

mira que le cambie el cero por el uno, pero sigue dando el mismo error, que extraño
  #6 (permalink)  
Antiguo 03/11/2010, 09:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: error en matriz

pruebalo así

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION pa_validaruc(xruc text)
  2. RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. i INTEGER;
  6. residuo INTEGER;
  7. ultdigito INTEGER;
  8. aruc INTEGER[][] = array[[0,0,0,0,0,0,0,0,0,0,0]];
  9. BEGIN
  10. IF LENGTH(xruc)<>11 THEN
  11. RETURN 0;
  12. END IF;
  13. FOR i IN 1..11 LOOP
  14. aruc[1][i]:=CAST(SUBSTRING(xruc,i+1,1) AS INTEGER);
  15. END LOOP;
  16. RETURN 1;
  17. END;
  18. $BODY$
  19. LANGUAGE 'plpgsql' VOLATILE
  20. COST 100;

inicializando el array
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 03/11/2010, 09:34
 
Fecha de Ingreso: septiembre-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: error en matriz

Muchas gracias huesos, asi funciona, pero me quedo con la duda por que para un array de una dimension no lo tuve que hacer y funciono bien.

muchas gracias
  #8 (permalink)  
Antiguo 03/11/2010, 10:03
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: error en matriz

Con un poco mas de tiempo buscaré la razón... por que no la se

si la encuentras primero que yo, posteala... jejeje

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: matriz
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 15:20.