• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kaskinho

ajuda triggers e mnsagens

14 mensagens neste tópico

:bye2: :wallbash: :eek: :hmm:

ola

eu estou a tentar fazer uma base de dados usando o sql

no entanto tenho uma alinea do trabalho que me pede que envie uma mensagem para o ecra com o resultado atraves de um trigger:

o cod que tenho e :

create or replace trigger Ponto_6_msg after update on cliente

for each row

declare

/*select (nome_clt

from cliente*/

  select imo.pref_preco, imo.area, imo.idlocalizacao, imo.idregiao, imo.idtipologia, imo.idacabamento, imo.idestado,

  cli.pref_preco, cli.pref_area, cli.pref_localizacao, cli.pref_regiao, cli.pref_tipologia, cli.pref_acabamentos, cli.pref_estado

        from imovel imo, cliente cli

        where imo.pref_preco = cli.pref_preco

            and imo.area = cli.pref_area;

            and imo.idlocalizacao = cli.pref_localizacao;

            and imo.idregiao = cli.pref_regiao;

            and imo.idtipologia = cli.pref_tipologia;

            and imo.idacabamento = cli.pref_acabamentos;

            and imo.idestado = cli.pref_estado;

  begin

        insert into Ponto6msg(nome_cliente)

        values (cliente.nome_clt);

                insert into Ponto6msg (mensagem_Ponto_6)

                value ('Existe um imóvel que corresponde ás preferências requeridas pelo cliente');

  end

no entanto isto nao devolve mensagem nehuma e nao consigo fazer isso

podem ajudar

obg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim é dificil ajudar...

Tipo, copia a questao do enunciado para aqui.

Tens que me dizer oq é para fazer, se é impedir q aconteça o update e assim lançar uma msg de erro.

Ou simplesmente imprimir na consola alguma cena com dbms_output.put_line(  "texto" );

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ó forrest vai ao moodle lol, a soninha disse "4"

agora a serio

issso esta a funcionar eu preciso que o rsultado disso seja colocado numa tabela que ja esta craida e que essa tabela apareca no ecra

bjitos

casco

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o angariador e o clt devem ser notificados sempre que seja feita a anagariaçao de um imovel que corresponda aos requisitos do clt.

essa notifivaçqao sera sominulada com a inserçao de uma mensagem numa tabela atraves de um trigger

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o angariador e o clt devem ser notificados sempre que seja feita a anagariaçao de um imovel que corresponda aos requisitos do clt.

essa notifivaçqao sera sominulada com a inserçao de uma mensagem numa tabela atraves de um trigger

Ainda não percebi :S

Tipo, onde eq estão os requesitos do cliente ?

Em que tabela eq qrs que guarda a msg ?

Ou seja, mostra-me o nome e os campos dessas tabelas e eu faço-te o codigo, se podesses por uma imagem do modelo de dados, era num iiinstantinho! :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

create or replace trigger Ponto_6_msg after update on cliente
for each row
declare
contador integer;
begin

select count(*) into contador from imovel imo 
where imo.pref_preco = :new.pref_preco and imo.area = :new.pref_area 
and imo.idlocalizacao = :new.pref_localizacao 
and imo.idregiao = :new.pref_regiao 
and imo.idtipologia = :new.pref_tipologia
and imo.idacabamento = :new.pref_acabamentos
and imo.idestado = :new.pref_estado;
if contador >0 then
insert into Ponto6msg(nome_cliente,mensagem_Ponto_6) values (:new.nome_clt,'Existe um imóvel que corresponde ás preferências requeridas pelo cliente');
end if;

end;

Espero que ajude. : )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esta na mesma :confused:  continua a nao imprimir nada, aco que vou furar os pneus do carro do prf se ele nap me der positiva nisto(la mais o mouta)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esta na mesma :confused:  continua a nao imprimir nada, aco que vou furar os pneus do carro do prf se ele nap me der positiva nisto(la mais o mouta)

depois do End if; acrescenta esta linha de codigo:

dbms_output.put_line('O cliente ' || :new.nome_clt || 'tem um imóvel que corresponde ás preferências requeridas pelo mesmo');

Não te esqueças de ligar o DBMS SEVER para que ele apanhe o outpute do servidor de bd. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

continua sem dar :confused:

Aparece algum erro quando compilas o Trigger ? ... Se sim mostra-me esse erro ..

Eq tem tudo para funcionar ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao da erro nenhum

--------------------------PARTE 1-------------------------------------

--------------------------CRIAÇÃO DE TABELAS E INSERÇÃO DE VALORES-------------------------------------

--------------------------TABELA CLIENTES-------------------------------------

create table cliente

(

idcliente char(10),

nome_clt varchar (50),

morada_clt varchar(100),

telefone_clt numeric (9),

scontacto_clt numeric(15),

pref_preco numeric(10),

pref_area numeric(15),

pref_localizacao varchar(15),

pref_regiao varchar(15),

pref_tipologia varchar(10),

pref_acabamentos varchar(10),

pref_estado varchar(10),

primary key (idcliente)

)

--------------------------PROCEDURE PARA INSERIR CLIENTES-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Clientes

(p_nome_clt cliente.nome_clt%type,

p_morada_clt cliente.morada_clt%type,

p_telefone_clt cliente.telefone_clt%type,

p_scontacto_clt cliente.scontacto_clt%type,

p_pref_preco cliente.pref_preco%type,

p_pref_area cliente.pref_area%type,

p_pref_localizacao cliente.pref_localizacao%type)

p_pref_regiao cliente.pref_regiao%type,

p_pref_tipologia cliente.pref_tipologia%type,

p_pref_acabamentos cliente.pref_acabamentos%type,

p_pref_estado cliente.pref_estado%type)

AS

  v_idcliente cliente.idcliente%type;

BEGIN

  select nvl(max(idcliente), 0) + 1 into v_idcliente

    from cliente;

insert into cliente(idcliente, nome_clt, morada_clt,telefone_clt, scontacto_clt, pref_area, pref_localizacao, pref_regiao, pref_tipologia, pref_acabamentos, pref_estado)

values(v_idcliente, p_nome_clt, p_morada_clt,p_telefone_clt, p_scontacto_clt, p_pref_area, p_pref_localizacao, p_pref_regiao, p_pref_tipologia, p_pref_acabamentos, p_pref_estado)

END Inserir_Clientes;

--------------------------INSERIR MANUALMENTE CLIENTES-------------------------------------

insert into cliente(idcliente, nome_clt, morada_clt, telefone_clt, scontacto_clt, pref_preco, pref_area, pref_localizacao, pref_regiao, pref_tipologia, pref_acabamentos, pref_estado)

values('00001','sandra', 'r progresso', '912222222', '915555000', '50000', '40', 'centro', 'matosinhos', 'T2','luxo', 'novo')

insert into cliente(idcliente, nome_clt, morada_clt,telefone_clt, scontacto_clt, pref_area, pref_localizacao, pref_regiao, pref_tipologia, pref_acabamentos, pref_estado)

values('00002','orlando', 'trv s jose', '912020202', '910000000', '30000', '500', 'campo', 'barcelos', 'Quinta','rustica', 'novo')

insert into cliente(idcliente, nome_clt, morada_clt,telefone_clt, scontacto_clt, pref_area, pref_localizacao, pref_regiao, pref_tipologia, pref_acabamentos, pref_estado)

values('00003','costumer', 'emprestador, balabalance esq', '150521526', '915544154', '1', 'baixa', 'lourinha', 'T0','maus', 'velho')

insert into cliente(idcliente, nome_clt, morada_clt,telefone_clt, scontacto_clt, pref_area, pref_localizacao, pref_regiao, pref_tipologia, pref_acabamentos, pref_estado)

values('00004','Ligia', 'Rua das águas', '133527796', '915222254', '3333', 'centro', 'famalicão', 'T2','luxo', 'novo')

insert into cliente(idcliente, nome_clt, morada_clt,telefone_clt, scontacto_clt, pref_area, pref_localizacao, pref_regiao, pref_tipologia, pref_acabamentos, pref_estado)

values('00005','Mafalda', 'Rua da Luz', '333427636', '915958574', '700', 'Coimbra', 'Centro', 'T2','baratos', 'velho')

-----------------------------------------------------------------------------

--------------------------TABELA IMOVEL-------------------------------------

drop table imovel

create table imovel

(

  idimovel char(10),

  pref_preco numeric(10),

  area numeric(15),

  idlocalizacao varchar(15),

  idregiao varchar(15),

  idtipologia varchar(10),

  idacabamento varchar(10),

  idestado varchar(10),

  data_disponivel date,

  estado_venda numeric(10),

  primary key(idimovel),

  foreign key(idlocalizacao) references localizacoes(idlocalizacao),

  foreign key(idregiao) references regioes(idregiao),

  foreign key(idtipologia) references tipologia(idtipologia),

  foreign key(idacabamento) references acabamentos(idacabamento),

  foreign key(idestado) references estados(idestado)

)

--------------------------PROCEDURE PARA INSERIR IMOVEIS-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Imoveis

(p_pref_preco imovel.pref_preco%type,

p_area imovel.area_clt%type

AS

  v_idimovel imovel.idimovel%type;

BEGIN

  select nvl(max(idimovel), 0) + 1 into v_idimovel

    from imovel;

insert into imovel(idimovel, pref_preco, area)

values(v_idimovel, p_pref_preco, p_area)

END Inserir_Imoveis;

--------------------------INSERIR IMOVEIS MANUALMENTE-------------------------------------

insert into imovel(idimovel, pref_preco, area, idlocalizacao, idregiao, idtipologia, idacabamento, idestado, data_disponivel, estado_venda)

values('1','100000 ', '100', 'Porto','Minho', 'T3', 'luxuoso', 'novo', '1989-03-12', '0')

insert into imovel(idimovel, pref_preco, area, idlocalizacao, idregiao, idtipologia, idacabamento, idestado, data_disponivel, estado_venda)

values('2','200000 ', '2000', 'Braga','Minho', 'T1', 'baratos', 'velho', '2008-07-02', '0')

insert into imovel(idimovel, pref_preco, area, idlocalizacao, idregiao, idtipologia, idacabamento, idestado, data_disponivel, estado_venda)

values('3', '40000 ', '600', 'Barcelos','Minho', 'T1', 'baratos', 'velho','1997-07-05', '0')

insert into imovel(idimovel, pref_preco, area, idlocalizacao, idregiao, idtipologia, idacabamento, idestado, data_disponivel, estado_venda)

values('4', '6000 ', '700', 'Coimbra','Centro', 'T2', 'baratos', 'velho', '2008-10-10', '0')

----------------------------------------------------------------

--------------------------TABELA VENDEDOR-------------------------------------

create table vendedor

(

  idvendedor char(10),

  nome_vend varchar(50),

  morada_vend varchar(50),

  telefone_vend numeric(9),

  primary key ( idvendedor)

)

--------------------------PROCEDURE PARA INSERIR VENDEDORES-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Venderores

(p_nome_vend vendedor.nome_vend%type,

p_morada_vend vendedor.morada_vend%type,

p_telefone_vend vendedor.telefone_vend%type

AS

  v_idvendedor vendedor.idvendedor%type;

--

BEGIN

  select nvl(max(idvendedor), 0) + 1 into v_idvendedor

    from vendedor;

insert into vendedor(idvendedor, nome_vend, morada_vend, telefone_vend)

values(v_idvendedor, p_nome_vend, p_morada_vend, p_telefone_vend)

END Inserir_Vendedores;

--------------------------INSERIR VENDEDORES MANUALMENTE-------------------------------------

insert into vendedor(idvendedor, nome_vend, morada_vend, telefone_vend)

values('501', 'Maria Joana', 'Rua da Aparição', '222222000')

insert into vendedor(idvendedor, nome_vend, morada_vend, telefone_vend)

values('502', 'António Meireles', 'Rua da Luz', '233332000')

-----------------------------------------------------------------------------

--------------------------TABELA ESTADOS DE IMOVEL-------------------------------------

create table estados

(

idestado varchar(15),

descricao varchar(50),

primary key (idestado)

)

--------------------------PROCEDURE PARA INSERIR ESTADOS-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Estados

(p_descricao estados.descricao%type

AS

  v_idestado estados.idestado%type;

--

BEGIN

  select nvl(max(idestado), 0) + 1 into v_idestado

    from estados;

insert into estados(idestado, descricao)

values(v_ididestado, p_descricao)

END Inserir_Estados;

--------------------------INSERIR MANUALMENTE ESTADOS-------------------------------------

insert into estados(idestado, descricao)

values('novo', 'acabado recentemente')

insert into estados(idestado, descricao)

values('luxo', 'Antigo ou novo mas com acabamentos luxuosos')

insert into estados(idestado, descricao)

values('velho', 'com mais de 20 anos')

insert into estados(idestado, descricao)

values('semi-novo', 'com 5 anos no máximo')

------------------------------------------------------------------

--------------------------TABELA LOCALIZACOES-------------------------------------

create table localizacoes

(

idlocalizacao varchar(15),

descricaoloc varchar(200),

primary key (idlocalizacao)

)

--------------------------PROCEDURE PARA INSERIR LOCALIZACOES-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Localizações

(p_descricaoloc localizacoes.descricaoloc%type

AS

  v_idlocalizacao localizacoes.idlocalizacao%type;

--

BEGIN

  select nvl(max(idlocalizacao), 0) + 1 into v_idlocalizacao

    from localizacoes;

insert into localizacoes(idlocalizacao, descricaoloc)

values(v_idlocalizacao, p_descricaoloc)

END Inserir_Localizacoes;

--------------------------INSERIR LOCALIZACOES MANUALMENTE-------------------------------------

insert into localizacoes(idlocalizacao, descricaoloc)

values('Porto', 'Bela cidade com ligações metropolitanas, vários polos universitários e a origem do conhecido vinho do porto.')

insert into localizacoes(idlocalizacao, descricaoloc)

values('Barcelos', 'Mais do que uma lenda que é o conhecido Galo de Barcelos, esta cidade cheia de história é também o maior concelho de portugal.')

insert into localizacoes(idlocalizacao, descricaoloc)

values('Braga', 'Cidade muito conhecida pela sua universidade (UMinho) e o Bom Jesus, bem como o calor da sua gente.')

insert into localizacoes(idlocalizacao, descricaoloc)

values('Lisboa', 'Capital do país.')

insert into localizacoes(idlocalizacao, descricaoloc)

values('Coimbra', 'Cidade estudantil mais conhecida de Portugal, pelas suas tradições académicas e instalações universitárias')

-----------------------------------------------------------------

--------------------------TABELA REGIOES-------------------------------------

create table regioes

(

idregiao varchar(30),

descricaoreg varchar(50),

primary key (idregiao)

)

--------------------------PROCEDURE PARA INSERIR CLIENTES MANUALMENTE-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Regioes

(p_descricaoreg regioes.descricaoreg%type

AS

  v_idregiao regioes.idregiao%type;

--

BEGIN

  select nvl(max(idregiao), 0) + 1 into v_idregiao

    from regioes;

insert into regioes(idregiao, descricaoloc)

values(v_idregiao, p_descricaoloc)

END Inserir_Regioes;

--------------------------INSERIR MANUALMENTE REGIOES-------------------------------------

insert into regioes(idregiao, descricaoreg)

values('Minho', 'Norte do país')

insert into regioes(idregiao, descricaoreg)

values('Algarve', 'Sul do país')

insert into regioes(idregiao, descricaoreg)

values('Trás-os-Montes e Alto Douro', 'Nordeste do país')

insert into regioes(idregiao, descricaoreg)

values('Centro', 'Centro do País')

----------------------------------------------------------

--------------------------TABELA ACABAMENTOS-------------------------------------

create table acabamentos

(

idacabamento varchar(15),

descricaoacab varchar(200),

primary key (idacabamento)

)

--------------------------PROCEDURE PARA INSERIR ACABAMENTOS-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Acabamentos

(p_descricaoacab acabamentos.descricaoacab%type

AS

  v_idacabamento acabamentos.idacabamento%type;

--

BEGIN

  select nvl(max(idacabamento), 0) + 1 into v_idacabamento

    from acabamentos;

insert into acabamentos(idacabamento, descricaoacab)

values(v_idacabamento, p_descricaoacab)

END Inserir_Acabamentos;

--------------------------INSERIR MANUALMENTE ACABAMENTOS-------------------------------------

insert into acabamentos(idacabamento, descricaoacab)

values('luxuoso', 'Acabamento em ouro, diamantes e platina')

insert into acabamentos(idacabamento, descricaoacab)

values('regulares', 'Acabamentos em madeira de cerejeira, quarto de suite.')

insert into acabamentos(idacabamento, descricaoacab)

values('baratos', 'Acabamentos acessíveis e práticos.')

----------------------------------------------------

--------------------------TABELA TIPOLOGIA-------------------------------------

create table tipologia

(

idtipologia varchar(15),

descricaotipo varchar(200),

primary key (idtipologia)

)

--------------------------PROCEDURE PARA INSERIR TIPOLOGIAS-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Tipologias

(p_descricaotipo tipologia.descricaotipo%type

AS

  v_idtipologia tipologia.idtipologia%type;

--

BEGIN

  select nvl(max(idtipologia), 0) + 1 into v_idtipologia

    from tipologia;

insert into tipologia(idtipologia, descricaotipo)

values(v_idtipologia, p_descricaotipo)

END Inserir_Acabamentos;

--------------------------INSERIR TIPOLOGIAS MANUALMENTE-------------------------------------

insert into tipologia(idtipologia, descricaotipo)

values('T0', 'Apartamento com uma sala, cozinha e uma casa de banho.')

insert into tipologia(idtipologia, descricaotipo)

values('T1', 'Apartamento com um quarto, uma sala, cozinha e uma casa de banho.')

insert into tipologia(idtipologia, descricaotipo)

values('T2', 'Apartamento com dois quarto, uma sala e uma casa de banho.')

insert into tipologia(idtipologia, descricaotipo)

values('T3', 'Apartamento com três quarto, uma sala e uma ou duas casas de banho.')

insert into tipologia(idtipologia, descricaotipo)

values('T4', 'Apartamento com um quarto, uma sala e uma ou mais casas de banho.')

insert into tipologia(idtipologia, descricaotipo)

values('Vivenda', 'Moradia com ou sem jardim e piscina.')

insert into tipologia(idtipologia, descricaotipo)

values('Quinta', 'Casa isolada com ou sem animais e terreno agrícola.')

--------------------------------------------------------------------------

--------------------------TABELA VENDAS-------------------------------------

create table vendas

(

  codigo_venda number(10),

  data_venda date, -- date - YYYY-MM-DD

  idimovel char(10),

  idcliente char(10),

  idvendedor char(10),

  idangariador char(10),

  primary key(codigo_venda),

  foreign key(idimovel) references imovel(idimovel),

  foreign key(idcliente) references cliente(idcliente),

  foreign key(idvendedor) references vendedor(idvendedor),

  foreign key(idangariador) references vendedor(idvendedor)

)

--------------------------PROCEDURE PARA INSERIR VENDAS-------------------------------------

CREATE OR REPLACE PROCEDURE Inserir_Vendas

(p_data_venda vendas.data_venda%type

AS

  v_codigo_venda tipologia.codigo_venda%type;

--

BEGIN

  select nvl(max(codigo_venda), 0) + 1 into v_codigo_venda

    from vendas;

insert into vendas(codigo_venda, data_venda)

values(v_codigo_venda, p_data_venda)

END Inserir_Vendas;

--------------------------INSERIR VENDAS MANUALMENTE-------------------------------------

insert into vendas(codigo_venda, data_venda, idimovel, idcliente, idvendedor, idangariador)

values('0001','1990-02-12','1', '00001', '501', '502')

insert into vendas(codigo_venda, data_venda, idimovel, idcliente, idvendedor, idangariador)

values('0002','1998-06-14','3', '00002', '502', '502')

insert into vendas(codigo_venda, data_venda, idimovel, idcliente, idvendedor, idangariador)

values('0003','2008-06-11','2', '00003', '501', '501')

insert into vendas(codigo_venda, data_venda, idimovel, idcliente, idvendedor, idangariador)

values('0004', '2004-01-31','4', '00004', '501', '501')

-------------------------------------------------------------------

--------------------------PARTE 2-------------------------------------

--------------------------PONTOS REQUERIDOS NO ENUNCIADO-------------------------------------

-------------------------------------------->Ponto 1 - Seleccionar o vendedor com o maior número de vendas_FUNCIONA

create or replace view Ponto_1 (IDVENDEDOR, CNT, NOME_VEND) as

select t.idvendedor, count(*) cnt, p.nome_vend --criar um contador para contar o numero de ocurrencias

from vendas t, vendedor p

where t.idvendedor = p.idvendedor

group by t.idvendedor, p.nome_vend

  having count(*)=(select max(cnt)

        from (select t.idvendedor, count(*) cnt --criar um contador para contar o numero de ocorrencias

              from vendas t

              group by t.idvendedor))

--------------------------------------------------------------------------------------------------------------------

--------------------------->Ponto 2 - view que liste o total de imóveis por tipologia vendidos e por vender_FUNCIONA

--Todos os que existem por tipologia:

select count(*) as Numero_de_Tipologias, idtipologia

from imovel

group by idtipologia

create or replace view Ponto_2 (vendidos, nao_vendidos, idimovel, idtipologia) as

select v.*, nv.* from (select count(*) as Vendidos, idtipologia

                        from imovel

                        where idimovel in(select idimovel from vendas)

                        group by idtipologia) v

                        full outer join

                        (select count(*) as Nao_vendidos, idtipologia

                        from imovel

                        where idimovel not in(select idimovel from vendas)

                        group by idtipologia) nv

on (v.idtipologia = nv.idtipologia);

-------------------------------->Ponto 3 - Dada uma tipologia, retorna o valor do imóvel vendido mais caro_FUNCIONA

-->É passada como parâmetro a tipologia, neste caso apenas vai mostrar por tipologia os mais caros

create or replace FUNCTION Ponto_3 (tipo varchar(10)) RETURN numeric(10) IS

  precomax numeric(10);

BEGIN

  SELECT max(pref_preco) INTO  precomax

      FROM imovel

      WHERE (idtipologia=tipo);

return(precomax)   

END Ponto_3;

----------------------->Ponto 4 - Passar ao estado anulado todos os imóveis disponiveis para venda á mais de um ano_FUNCIONA

DECLARE

CURSOR ponto4 IS

          SELECT estado_venda , idimovel,(current_date - data_disponivel) as Diferenca_em_Dias

          FROM imovel

          WHERE (current_date - data_disponivel)>365;

  pt4 ponto4%ROWTYPE;

BEGIN

OPEN ponto4;

LOOP

    FETCH ponto4 INTO pt4;

    EXIT WHEN ponto4%NOTFOUND;

    update imovel

    set estado_venda='1'

    where idimovel=pt4.idimovel;

    dbms_output.put_line(pt4.estado_venda);

 

END LOOP;

CLOSE ponto4;

END;

select * from imovel

--Ponto 5 - Função que dada uma zona, retorne o valor médio por m2 dessa zona_EM PRINCIPIO FUNCIONA

--Já deve funcionar este:

create or replace FUNCTION Ponto_5 (zona varchar(15)) RETURN numeric(10) IS

  valor_medio_m2 numeric(15);

BEGIN

  SELECT sum(sum(area)/count(area)) INTO  valor_medio_m2

      FROM imovel

      WHERE (idlocalizacao=zona);

return(valor_medio_m2 )   

END Ponto_5;

--exemplo para fazer a média de área em m2 dos apartamentos que existem no porto, qie funciona, portanto o de cima deve funcionar.

  SELECT sum(sum(area)/count(area)) g

      FROM imovel

      where(idlocalizacao='Braga')

      group by idlocalizacao

---------------->Ponto 6  inserir uma mensagem numa tabela sempre que haja um imovel igual aos requesitos do cliente

--trigger, diz no enunciado

--se prefs_cliente=imovel, inserir mensagem numa tabela

--Criação de trigger para inserir as mensagens na tabela criada, sempre que existirem imoveis iguais ás prefs dpo cliente:

--falta inserir cursor para seleccionar

create or replace trigger Ponto_6_msg after update on cliente

for each row

declare

contador integer;

begin

select count(*) into contador from imovel imo

where imo.pref_preco = :new.pref_preco and imo.area = :new.pref_area

and imo.idlocalizacao = :new.pref_localizacao

and imo.idregiao = :new.pref_regiao

and imo.idtipologia = :new.pref_tipologia

and imo.idacabamento = :new.pref_acabamentos

and imo.idestado = :new.pref_estado;

if contador >0 then

insert into Ponto6msg(nome_cliente,mensagem_Ponto_6) values (:new.cliente,'Existe um imóvel que corresponde ás preferências requeridas pelo cliente');

end if;

dbms_output.put_line('O cliente ' || :new.cliente || 'tem um imóvel que corresponde ás preferências requeridas pelo mesmo');

end;

----------------------------------->PONTO 7

DECLARE

CURSOR ponto7 IS

    select sum(tot) as Comissão_final, idvendedor

    from (select sum(e.pref_preco*0.04*0.1)as tot, r.idvendedor;

                  from imovel e, vendas r

                  where e.idimovel=r.idimovel

                  and r.idvendedor = idangariador

                  group by idvendedor;

                  union------------------------------------------------------------------------------------

                  select sum((e.pref_preco*0.04*0.1)/2) as tot, r.idvendedor

                  from imovel e, vendas r

                  where e.idimovel=r.idimovel

                  and r.idvendedor <> idangariador

                  group by idvendedor;) x

    group by idvendedor;

  pt7 ponto7%ROWTYPE;

BEGIN

OPEN ponto7;

LOOP

    FETCH ponto7 INTO pt7;

    EXIT WHEN ponto7%NOTFOUND;

    insert into ponto7

    select to_char(e.data_venda, 'yyyy') as ano,to_char(e.data_venda,'mm') as mes, e.idvendedor, e.idangariador, pt7.comissão_final

        from vendas e

        order by ano, mes;

    dbms_output.put_line(pt7.comissao_final);

END LOOP;

CLOSE ponto7;

END;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    /*insert into ponto7(ano, mes, idvendedor, comissao)

    values(to_char(imovel.data_venda, 'yy'), to_char(imovel.data_venda, 'mm'), idvendedor, resultado_igual);

    insert into ponto7 values(to_char(imovel.data_venda, 'yy'), to_char(imovel.data_venda, 'mm'), idvendedor, resultado_igual);*/

--Preço_do_imovel_vendido*4%*10% se for o mesmo vendedor e angariador

select sum(tot) as Comissão_final, idvendedor

            from (select sum(e.pref_preco*0.04*0.1)as tot, r.idvendedor

                  from imovel e, vendas r

                  where e.idimovel=r.idimovel

                  and r.idvendedor = idangariador

                  group by idvendedor

            union

                  select sum((e.pref_preco*0.04*0.1)/2) as tot, r.idvendedor

                  from imovel e, vendas r

                  where e.idimovel=r.idimovel

                  and r.idvendedor <> idangariador

                  group by idvendedor) x

    group by idvendedor

--------------------------CRIAÇÃO DE TABELAS EXTRA-------------------------------------

--------------------------PONTO 6-------------------------------------

create table Ponto6msg

(

nome_cliente varchar(10),

nome_angariador varchar (10),

mensagem_Ponto_6 varchar(20)

)

--------------------------PONTO 7-------------------------------------

create table ponto7

(

ano numeric (4),

mes varchar(10),

idvendedor char(10),

idangariador char(10),

comissao numeric(10)

)

isto e o digo todo do trabalho

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora