Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/03/2009, 09:14
barbagallo
 
Fecha de Ingreso: marzo-2009
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Encadenar una funcion

Hola: Soy nuevo en esto, pero quiero completar una identificacion (ej: V-12345678-0), Realizo este programa para obtener el numero donde va el cero, me genera la funcion pero cuando trato de concatenarlo en el update no me funcion y me da un error)

CREATE OR REPLACE FUNCTION gl_cambio_rif ("varchar")
RETURNS int4 AS '
DECLARE


rif alias for $1;
cosa_arreglo int4[2][2];
var_valor2 integer;
valor integer ARRAY[9];
total integer ARRAY[9];

I integer[3]:= 0;
J integer[3]:= 0;
T_TOTAL integer[3]:= 0;
VERIFICADOR integer[3]:= 0;
DIGITO integer[3]:= 0;
SUMA integer[4]:= 0;
RESTO integer[4]:= 0;
DIVIDENDO integer[4]:= 0;
T_VALOR integer[4]:= 0;

BEGIN

valor[1] := 3;
total[1] := 0;
valor[2] := 2;
total[2] := 0;
valor[3] := 7;
total[3] := 0;
valor[4] := 6;
total[4] := 0;
valor[5] := 5;
total[5] := 0;
valor[6] := 4;
total[6] := 0;
valor[7] := 3;
total[7] := 0;
valor[8] := 2;
total[8] := 0;
valor[9] := 4;
total[9] := 0;


IF substr(rif,1,1) = "J" THEN
var_valor2 := 3;
ELSEIF substr(rif,1,1) = "P" THEN
var_valor2 := 4;
ELSEIF substr(rif,1,1) = "G" THEN
var_valor2 := 5;
ELSEIF substr(rif,1,1) = "V" THEN
var_valor2 := 1;
ELSEIF substr(rif,1,1) = "E" THEN
var_valor2 := 2;
END IF;

VERIFICADOR := TO_NUMBER(SUBSTR(x_Rif, LENGTH(x_Rif),1));

FOR I IN 1..19
LOOP
IF I > 11 THEN
J := J+1;
total[J] := TO_NUMBER(SUBSTR(X_Rif,I,1)) * valor[J];
END IF;
END LOOP;

Total[9] := Valor[9] * Valor;

FOR I IN 1..9
LOOP
Total := Total + Total[I];
END LOOP;

Dividendo := FLOOR(Total/11);

Resto := Total - (Dividendo * 11);

IF Resto > 1 THEN
Digito := 11 - Resto;
ELSE
Digito := 0;
END IF;

RETURNS valor[var_valor2];

END;'
LANGUAGE 'plpgsql' VOLATILE;
GRANT EXECUTE ON FUNCTION gl_cambio_rif ("varchar") TO postgres WITH GRANT OPTION;
GRANT EXECUTE ON FUNCTION gl_cambio_rif ("varchar") TO public;

update personal set numero_rif = nacionalidad || '-' || lpad(cedula,8,'0') || '-' || gl_cambio_rif{valor{var_valor2}}; (esto es lo que esta malo que no puedo unir la funcion)