Jump to content
Fórum Script Brasil
  • 0

Ajuda com atividade de procedure


LucasOS

Question

Olá, estou tentando fazer uma atividade de um curso que estou fazendo uma atividade em que estou tentando a mais de um dia e não consigo de jeito nenhum que chegue perto do que se pede, gostaria de ajuda 

o exercício pede isso: 

- Desenvolva um procedure que atualize o valor de todos os apartamentos de acordo com o identificador do condomínio e o percentual de aumento passados como parâmetro. O processo deverá alterar o valor dos apartamentos somente do condomínio e percentual definido por um valor inteiro (10% = 10), passados como parâmetros.

O código do banco de dados:

create database imobiliaria;

use imobiliaria;

create table sindico (
  matricula int(3) not null auto_increment,
  nome varchar(80) default null,
  endereco varchar(80) default null,
  telefone varchar(15) default null,
  primary key (matricula)
);

insert into sindico values (1,'antonio carlos','avenida santos dummont, número 789, califórnia, são paulo','(11) 3456-6787'),(2,'sidnei delgado','alameda xv de novembro, número 123, jockey club, são paulo','(11) 3452-4562');

create table condominio (
  codigo int(5) not null auto_increment,
  nome varchar(50) default null,
  endereco varchar(80) default null,
  matricula_sind int(3) default null,
  primary key (codigo),
  key fx_cond_sindico (matricula_sind),
  constraint fx_cond_sindico foreign key (matricula_sind) references sindico (matricula)
);

insert into condominio values (1,'condomínio são paulo','alameda getulio vargas, número 897, centro, são paulo',1),(2,'condomínio brasil','avenida general gusmão, número 453, penha, são paulo',2);

create table apartamento (
  numero varchar(5) not null,
  tipo varchar(20) default null,
  codigo_cond int(5) default null,
  valor double(10,2) default '0.00',
  primary key (numero),
  key fk_ap_cond (codigo_cond),
  constraint fk_ap_cond foreign key (codigo_cond) references condominio (codigo)
);

insert into apartamento values ('a101','padrão',1,100000.00),('a201','padrão',1,115000.00),('a301','padrão',1,125000.00),('a401','padrão',1,135000.00),('a501','cobertura',1,150000.00),('b101','padrão',2,200000.00),('b201','padrão',2,215000.00),('b301','padrão',2,225000.00),('b401','padrão',2,235000.00),('b501','cobertura',2,250000.00);

create table garagem (
  numero int(3) not null auto_increment,
  tipo varchar(20) default null,
  numero_ap varchar(5) default null,
  primary key (numero),
  key fk_gar_apartamento (numero_ap),
  constraint fk_gar_apartamento foreign key (numero_ap) references apartamento (numero)
);

insert into garagem values (1,'padrão','a101'),(2,'padrão','a201'),(3,'padrão','a301'),(4,'padrão','a401'),(5,'coberta','a501'),(6,'padrão','b101'),(7,'padrão','b101'),(8,'padrão','b201'),(9,'padrão','b201'),(10,'padrão','b301'),(11,'padrão','b301'),(12,'padrão','b401'),(13,'padrão','b401'),(14,'coberta','b501'),(15,'coberta','b501');

create table proprietario (
  rg varchar(15) not null,
  nome varchar(80) default null,
  telefone varchar(15) default null,
  email varchar(50) default null,
  primary key (rg)
);

insert into proprietario values ('12345678-0','carlos eduardo','(11) 3256-7890','carloseduardoead@email.com.br'),('32145678-4','oswaldo lima','(11) 2314-9876','oswaldolimaead@email.com.br'),('32156788-0','pedro castro','(11) 3452-8743','pedroead@email.com.br'),('46536267-3','maria luiza','(11) 2345-1627','marialuizaead@email.com.br'),('54367281-2','joana darc','(11) 4563-2315','joanadarcead@email.com.br'),('74853928-2','benedito goes','(11) 3427-4132','beneditogoesead@email.com.br'),('76534126-4','matheus henrique','(11) 2234-1123','matheushenriqueead@email.com.br'),('98635314-5','augusto silva','(11) 4122-2134','augustosilvaead@email.com.br'),('99987271-1','marcos vinicius','(11) 2124-2427','marcosviniciusead@email.com.br');

create table proprietario_apartamento (
  prop_ap_id int(3) not null auto_increment,
  numero_ap varchar(5) default null,
  rg_prop varchar(15) default null,
  primary key (prop_ap_id),
  key fk_pa_apartamento (numero_ap),
  key fk_pa_proprietario (rg_prop),
  constraint fk_pa_apartamento foreign key (numero_ap) references apartamento (numero),
  constraint fk_pa_proprietario foreign key (rg_prop) references proprietario (rg)
);

insert into proprietario_apartamento values (1,'a101','12345678-0'),(2,'a201','32145678-4'),(3,'a301','32156788-0'),(4,'a401','46536267-3'),(5,'a501','54367281-2'),(6,'b101','74853928-2'),(7,'b201','76534126-4'),(8,'b301','98635314-5'),(9,'b401','99987271-1'),(10,'b501','99987271-1');

 

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 1

Bom dia.

Sua tarefa, basicamente, utiliza um dos sois updates abaixo:

UPDATE apartamento
SET valor = valor*(1+(param_ajuste/100))
WHERE codigo_cond = param_cod_condominio;

Ou 

UPDATE apartamento a
INNER JOIN condominio c ON a.codigo_cond = c.codigo 
SET valor = valor*(1+(param_ajuste/100))
WHERE c.nome = param_nome_condominio;

Agora é só colocar um dos dois na procedure.

Link to comment
Share on other sites

  • 0

Só um complemento. 

A fórmula 

valor = valor*(1+(param_ajuste/100))

Ajusta o valor para cima. 

Exemplo: valor = 100; param_ajuste = 10; Novo resultado de valor = 110 (subiu 10%)

E a fórmula 

valor = valor*(1-(param_ajuste/100))

Ajusta o valor para baixo.

Exemplo: valor = 100; param_ajuste = 10; Novo resultado de valor = 90 (desceu 10%)

Link to comment
Share on other sites

  • 0

 

o que tem de errado nesse codigo?

delimiter $$    
 create procedure valor_novo (out param_cod_condominio int)
begin
   
UPDATE apartamento
INNER JOIN condominio c ON a.codigo_cond = c.codigo 
SET valor = valor*(1+(param_ajuste/10))
WHERE codigo_cond = param_cod_condominio;

end $$
delimiter ;

e como eu posso chama-lo ele dentro do meu banco de dados?

Edited by prints1
Link to comment
Share on other sites

  • 0
Em 17/02/2023 em 11:44, prints1 disse:

 

o que tem de errado nesse codigo?

delimiter $$    
 create procedure valor_novo (out param_cod_condominio int)
begin
   
UPDATE apartamento
INNER JOIN condominio c ON a.codigo_cond = c.codigo 
SET valor = valor*(1+(param_ajuste/10))
WHERE codigo_cond = param_cod_condominio;

end $$
delimiter ;

e como eu posso chama-lo ele dentro do meu banco de dados?

Amigo você precisa colocar o param_ajuste no create procedure

delimiter $$    

 create procedure valor_novo (out param_cod_condominio int, in param_ajuste int)

begin

E no call

Você chama 

Call valor_novo(1,10)

Sendo o primeiro número é o código do condomínio que você quer alterar e o segundo número a porcentagem de ajuste que você quer atribuir

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...