Baixe o app para aproveitar ainda mais
Prévia do material em texto
1- Criar uma função para imprimir uma estrutura de tabuada. ex.: 5 X 1 = 5; 5 X 2 = 10; 5 X 10 = 50 CREATE OR REPLACE FUNCTION tabuada() RETURNS integer AS $$ BEGIN FOR counter IN 1..10 LOOP RAISE NOTICE '%X1=%',counter, counter*1; RAISE NOTICE '%X2=%',counter, counter*2; RAISE NOTICE '%X3=%',counter, counter*3; RAISE NOTICE '%X4=%',counter, counter*4; RAISE NOTICE '%X5=%',counter, counter*5; RAISE NOTICE '%X6=%',counter, counter*6; RAISE NOTICE '%X7=%',counter, counter*7; RAISE NOTICE '%X8=%',counter, counter*8; RAISE NOTICE '%X9=%',counter, counter*9; RAISE NOTICE '%X10=%',counter, counter*10; END LOOP; end; $$ LANGUAGE 'plpgsql'; 2- Criar uma função para verificar e retornar se o ano informado como parâmetro é bissexto ou não. Um ano será bissexto quando for possível dividi-lo por 4, mas não por 100 ou quando for possível dividi-lo por 400. CREATE OR REPLACE FUNCTION bissexto(int) RETURNS void AS $$ DECLARE year int:=$1; quatro decimal:=0; cem decimal:=0; quatrocentos decimal:=0; BEGIN quatro := MOD(year,4); RAISE NOTICE 'quatro %',quatro; cem := MOD(year,100); RAISE NOTICE 'cem %',cem; quatrocentos := MOD(year,400); RAISE NOTICE 'quatrocentos %',quatrocentos; IF (quatro = 0) AND (cem != 0) THEN RAISE NOTICE 'O ano % É bissexto',year; ELSEIF (quatro = 0) AND (quatrocentos = 0) THEN RAISE NOTICE 'O ano % É bissexto',year; ELSE RAISE NOTICE 'O ano % Não é bissexto',year; END IF; END; $$ LANGUAGE 'plpgsql'; 3- Criar uma função para atualizar uma tabela de produtos representando o aumento do percentual informado no parâmetro. CREATE OR REPLACE FUNCTION updateprice(numeric) RETURNS void AS $$ DECLARE percent numeric := $1; BEGIN UPDATE produtos SET price = price+((price*percent)/100); END; $$ LANGUAGE 'plpgsql'; 4- Criar uma função que deverá receber o código de um cliente e a partir deste retornar seu nome, e seu e-mail. CREATE OR REPLACE FUNCTION showclient(int) RETURNS table (name varchar, email varchar) AS $$ DECLARE codigo int := $1; BEGIN RETURN query SELECT c.name ,c.email from clientes c where codigo = codigo ; END; $$ LANGUAGE 'plpgsql'; 5- Criar uma função que receberá, um NOME e quatro notas conforme a sequência: (NOME,A1,A2,A3,A4). A partir destes valores deverá efetuar o cálculo da média somando o maior valor entre A1 e A2 às notas A3 e A4 e dividindo o valor obtido por três (achando a média). CREATE OR REPLACE FUNCTION showmedia(nome text,A1 decimal,A2 decimal,A3 decimal,A4 decimal) RETURNS decimal AS $$ DECLARE media decimal := 0; maior decimal := 0; BEGIN maior := greatest(A1,A2); media := (maior + A3 + A4)/3; RAISE NOTICE '% sua média é %',nome,media; RETURN media; END; $$ LANGUAGE 'plpgsql'; 6- Criar uma procedure que receberá o CÓDIGO de um PRODUTO. A partir deste dado deverá consultar uma tabela denominada PRODUTO e verificar a que CATEGORIA o produto pertence. Com base nesta informação deverá informar qual o valor (em Reais) do IPI consultando para isso uma tabela denominada ALIQUOTA. As tabelas PRODUTO e ALIQUOTA estão parcialmente representadas a seguir: PRODUTO (COD_PRO, VALOR, COD_CAT) ALIQUOTA (COD_CAT, IPI). create procedure findipi(i integer,inout ipival decimal DEFAULT NULL) AS $$ begin SELECT c.ipi FROM produtos p join aliquota c on c.cod_cat = p.cod_cat WHERE p.id=i INTO ipival; return; end ; $$ LANGUAGE 'plpgsql'; 7- Uma empresa oferece um bônus a seus funcionários com base no lucro liquido (tabela LUCRO) obtido durante o ano e no valor do salário do funcionário (tabela SALARIO). O bônus é calculado conforme a seguinte formula: BONUS = LUCRO * 0.01 + SALARIO * 0.05. Crie uma procedure que receba o ano (tabela LUCRO) e número de matricula do funcionário e devolva o valor do seu respectivo bônus. create procedure showbonus(yea integer,mat bigint,inout bonus decimal DEFAULT NULL) AS $$ DECLARE noa decimal; sal decimal; begin SELECT lucro INTO noa FROM lucro WHERE ano = yea; SELECT salario INTO sal FROM funcionario WHERE matricula = mat; bonus = (noa*0.01) + (sal*0.05); return; end ; $$ LANGUAGE 'plpgsql'; 8- Criar uma função que deverá receber um número inteiro e retornar se o mesmo é primo ou não. (Lembrete: Números primos são divisíveis somente por eles mesmos e por um). CREATE OR REPLACE FUNCTION showprimo(num int) RETURNS void AS $$ DECLARE num int := $1; c int := 0; BEGIN FOR counter IN 1..num LOOP IF mod(num,counter) = 0 THEN c := c+1; END IF; end loop; if c = 2 then RAISE NOTICE 'O numero % é primo',num; else RAISE NOTICE 'O numero % NÃO é primo',num; end if; END; $$ LANGUAGE 'plpgsql'; 9- Criar uma função que deverá receber um valor correspondente à temperatura em graus Fahrenheit e retornar o equivalente em graus Celsius. Fórmula para conversão: C = (F - 32) / 1.8 CREATE OR REPLACE FUNCTION firentocelsius(num decimal) RETURNS decimal AS $$ DECLARE num int := $1; BEGIN RETURN (num - 32)/1.8; END; $$ LANGUAGE 'plpgsql'; 10- Criar uma função que deverá receber o número de matrícula de um funcionário e retornar o seu nome e o nome de seu departamento CREATE OR REPLACE FUNCTION showfuncionario(num bigint) RETURNS table(nome varchar,departamento varchar) AS $$ DECLARE num int := $1; BEGIN RETURN query SELECT funcionario.nome,funcionario.departamento from funcionario where funcionario.matricula=num; END; $$ LANGUAGE 'plpgsql';
Compartilhar