You are on page 1of 10

FUNCIONES Y PROCEDIMIENTOS ALMACENADOS

Funciones: Retorna un valor.

Procedimientos almacenados: No retorna valor

Funciones
(ORACLE)
Create or replace function nombreFuncion ( argumentos)
returns tipoRetorno as $$
Declare
------
------
Begin

CUERPO

End

(POSTGRES)
Create or replace function nombreFuncion ( argumentos)
returns tipoRetorno as $nombre variable$
Declare
------
------
Begin

CUERPO

End
$$
Language plpgsql;

Cree una funcion que retorne el texto hola mundo.


Create or replace function uno(x varchar)
returns varchar as $$
declare
msj varchar;
begin
msj := 'hola mundo';
return msj;
end
$$
Language 'plpgsql';

Cree una funcin que devuelva la suma de los siguientes nmeros

Create or replace function dos(x int, y int, z int)


returns varchar as $$
declare
suma int;
begin
suma := x+y+z;
return suma;
end
$$
Language 'plpgsql';

Create or replace function uno(x varchar)


returns varchar as $$
declare
msj varchar;
begin
msj := x;
return msj;
end
$$
Language 'plpgsql';

select * from uno('holase');

Create or replace function dos(x int, y int, z int)


returns varchar as $$
declare
suma int;
begin
suma := x+y+z;
return suma;
end
$$
Language 'plpgsql';

select * from dos(10,5,8);

Create or replace function tres(x int[])


returns varchar as $$
declare
suma int;
begin
FOR i IN 0..array_length(x, 1) LOOP

suma := suma + x[i];


END LOOP;

return suma;
end
$$
Language 'plpgsql';

select * from tres(ARRAY[10,5,8]);

Create or replace function cinco(x numeric, y numeric, z numeric)


returns numeric as $$
declare
suma numeric;
begin
suma := x+y+z;
return suma;
end
$$
Language 'plpgsql';

select * from cinco(31,16,7);


Create or replace function cuatro(x numeric, y numeric, z numeric)
returns varchar as $$
declare
suma numeric;
begin
suma := x+y+z;
return 'El resultado de la suma de '||x||' + '||y||' + '||z||' es: '||suma;
end
$$
Language 'plpgsql';

select * from cuatro(31,16,7);

Cree una funcion de nombre tres que retorne dados los dos catetos la hipotenusa de un
triangulo

Create or replace function ocho(a numeric, b numeric)


returns varchar as $$
declare
h numeric;
begin
h := round( sqrt(power(a,2)+power(b,2)),2);
return 'La hipotenusa formada por el cateto a de '||a||'[u] y el cateto b de '||b||'[u] es: '||h||'[u]';
end
$$
Language 'plpgsql';

select * from ocho(3,4);

Sentencia IF
Cree una funcin que lea la nota de un estudiante y determine si aprob o perdi la materia
Create or replace function nueve(c1 numeric, c2 numeric, c3 numeric, nombre varchar)
returns varchar as $$
declare
def numeric;
texto varchar;
begin
def := round(((c1 + c2 + c3)/3),2);

IF def < 2.96 THEN


texto = 'perdi';
ELSE
texto = 'pas';
END IF;

return 'El/La estudiante '||nombre||' '||texto||' con un promedio de: '||def;


end
$$
Language 'plpgsql';

Elseif validacionesw
Create or replace function uno(c1 numeric, est varchar)
returns varchar as $$
declare
msg varchar;
begin

IF c1 < 0 or c1 > 5 THEN


msg = 'La nota '||c1||' no es vlida';
ELSEIF c1 >= 2.95 THEN
msg = 'El estudiante '||est||' con nota '||c1||' pas';
ELSE
msg = 'El estudiante '||est||' con nota '||c1||' perdi';
END IF;

return msg;
end
$$
Language 'plpgsql';
Determine si es par o impar

Create or replace function dos(c1 int)


returns varchar as $$
declare
msg varchar;
begin

IF c1%2 = 0 THEN
msg = 'El nmero '||c1||' es par';
ELSE
msg = 'El nmero '||c1||' es impar';
END IF;

return msg;
end
$$
Language 'plpgsql';

SENTENCIA WHILE
Cree una funcin que encuentre el factorial de un nmero

Create or replace function tres(n int)


returns varchar as $$
declare
i int;
fact numeric;
begin
i = 1;
fact = 1;

while i<=n loop


fact = fact*i;
i=i+1;
End loop;

return 'El factorial de '||n||' es: '||fact;

end
$$
Language 'plpgsql';

SENTENCIA FOR
Cree una funcin que encuentre el factorial de un nmero

Create or replace function tres(n int)


returns varchar as $$
declare
fact numeric;
begin
fact = 1;

For i in 1..n loop


fact = fact*i;
End loop;

return 'El factorial de '||n||' es: '||fact;

end
$$
Language 'plpgsql';

Cree una funcion de nombre siete que lea tres valores nmericos positivos

1. Determine si los tres valores forman un tringulo


2. si lo forman encuentre el rea
3. Determinar el tipo de triangulo
4. Determinar si es rectangulo

Create or replace function uno(lado1 numeric, lado2 numeric, lado3 numeric)


returns varchar as $$
declare
mayor numeric;
dosLados numeric;
p numeric;
area numeric;
msg varchar;
tipo varchar;
angulo1 numeric;
angulo2 numeric;
angulo3 numeric;
rect varchar;
begin
tipo = 'Escaleno';
mayor := lado1;
dosLados := lado2+lado3;

IF mayor < lado2 THEN


mayor := lado2;
dosLados := lado1+lado3;

IF mayor < lado3 THEN


mayor := lado3;
dosLados := lado1+lado2;

END IF;

ELSEIF mayor < lado3 THEN


mayor := lado3;
dosLados := lado1+lado2;
END IF;

IF lado1 = lado2 THEN


tipo = 'Issceles';

IF lado1 = lado3 THEN


tipo = 'Equilatero';

END IF;

ELSEIF lado1 = lado3 THEN


tipo = 'Issceles';
ELSEIF lado2 = lado3 THEN
tipo = 'Issceles';
END IF;

IF dosLados <= mayor THEN


msg = 'Los nmeros : '||lado1||', '||lado2||' y '||lado3||' No forman un tringulo.';

ELSE
p :=(lado1+lado2+lado3)/2;
area := round(sqrt(p*(p-lado1)*(p-lado2)*(p-lado3)),2);
angulo1:= degrees(acos((power(lado2,2)- power(lado1,2) - power(lado3,2))/(-2*lado1*lado3)));
angulo2:= degrees(acos((power(lado3,2)- power(lado2,2) - power(lado1,2))/(-2*lado1*lado2)));
angulo3:= degrees(acos((power(lado1,2)- power(lado2,2) - power(lado3,2))/(-2*lado2*lado2)));
IF angulo1 = 90 or angulo2 = 90 or angulo3 =90 THEN
rect = 's forman un tringulo rectngulo';

ELSE
rect = 'no forman un tringulo rectngulo';
END IF;
msg = 'Los nmeros : '||lado1||', '||lado2||' y '||lado3||' S forman un tringulo '||tipo||' de rea : '||
area||'.'||' cuyos angulos: '||round(angulo1,2)||' , '||round(angulo2,2)||' y '||round(angulo3,2)||' '||
rect;

END IF;

return msg;
end
$$
Language 'plpgsql';
select * from uno(3,5,4)

You might also like