PostgreSQL - llamar funcion en plpgsql desde un query SQL

 
Vista:

llamar funcion en plpgsql desde un query SQL

Publicado por Javier Mendoza (1 intervención) el 12/06/2006 22:21:25
El problema q tengo es que desea utilizar una funcion construida con el lenguaje plpgsql y luego quiero llamarla desde un select y tengo problemas.....

La funcion es:
CREATE OR REPLACE FUNCTION propercase("varchar")
RETURNS "varchar" AS
$BODY$
DECLARE
v_entrada alias for $1;
v_salida varchar(250);
v_control int;
v_tamano int;
v_minuscula_a int;
v_minuscula_z int;
v_limitador char(4);
v_mayuscula_A int;
v_mayuscula_Z int;
BEGIN
v_control = 1;
v_tamano = length(v_entrada);
v_salida = '';
v_minuscula_a = 97;
v_minuscula_z = 122;
v_limitador = ' ,-.';
v_mayuscula_A = 65;
v_mayuscula_Z = 90;
IF v_entrada IS NULL THEN
RETURN NULL;
END IF;
WHILE v_control <= v_tamano LOOP
--Recorre espacios en blanco
WHILE POSITION(SUBSTR(v_entrada,v_control,1) in v_limitador) > 0 LOOP
v_salida = v_salida || SUBSTR(v_entrada,v_control,1);
v_control = v_control + 1;
END LOOP;
IF ASCII(SUBSTR(v_entrada,v_control,1)) BETWEEN v_minuscula_a AND v_minuscula_z THEN
--Convirtiendo el primer caracter a mayuscula
v_salida = v_salida || UPPER(SUBSTR(v_entrada,v_control,1));
ELSE
v_salida = v_salida || SUBSTR(v_entrada,v_control,1);
END IF;
v_control = v_control + 1;
WHILE POSITION(SUBSTR(v_entrada,v_control,1) in v_limitador)=0 AND (v_control <= v_tamano) LOOP
IF ASCII(SUBSTR(v_entrada,v_control,1)) BETWEEN v_mayuscula_A AND v_mayuscula_Z THEN
v_salida = v_salida || LOWER(SUBSTR(v_entrada,v_control,1));
ELSE
v_salida = v_salida || SUBSTR(v_entrada,v_control,1);
END IF;
v_control = v_control + 1;
END LOOP;
END LOOP;
RETURN v_salida;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Si yo a esta funcion la llamo asi me fuciona: select propercase('hello world'); y me retorna Hello World. El problema es que la quiero utilizar asi: Select propercase(apellido) from clientes; y es ahi donde me da un error q al parecer se queda en un loop infinito o algo asi... ojala alguien pueda darme una mano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder