Buscar

Exercicio de fixacao -LinguagemPROC_DB_RESPOSTAS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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';

Continue navegando