Problemas Concadenar
Publicado por Hugo Barbagallo (3 intervenciones) el 06/03/2009 21:43:39
Este es la funcion que estoy creando, y quiero concadenar para tener el siguientes resultado : V-12345678-1 y no se como hacerlo, intente así, me sale V-12345678- pero el ultimo numero si lo pongo me da error
update personal set numero_rif = nacionalidad || '-' || lpad(cedula,8,'0') || '-' || valor[var_valor2];
pero el valor de la funcion me da error, Como haria esta actualizacion concadenando el valor obtenido en la funcion?. (abajo tengo el problema que obtiene el ultimo numero que lo quisiera concadenar)
_______________________________________________________________________
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') || '-' || valor[var_valor2];
pero el valor de la funcion me da error, Como haria esta actualizacion concadenando el valor obtenido en la funcion?. (abajo tengo el problema que obtiene el ultimo numero que lo quisiera concadenar)
_______________________________________________________________________
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;
Valora esta pregunta


0