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)