Ir para conteúdo
MauVirtual

Usar Trigger? Procedure? Ambas?

Recommended Posts

Pessoal, estou perdido tenho a seguinte tarefa abaixo, mas usando a trigger não posso dar o select ela nao aceita, e não sei se uso procedure, triger, ambas, sei que essa parte deveria ser feito pela aplicação, mas o professor quer essa apresentação somente em BD.

compare se a data e hora da viagem e o motorista e viatura estão disponíveis antes de incluir no banco de dados,

Entao digamos que a viatura Gol tem uma viagem com o motorista Carlos dia 22/03/2018 as 11:00 com termino no mesmo dia porem na hora 17:00 e suponhamos que alguem quera cadastra a viagem com o mesmo motorista a mesma viatura no mesmo dia porem no horario do 12:00, não poderia ser cadastrado já que a viatura e motorista estariam ocupados. Estão preci ser checado se a viatura está disponivel, se o motorista está disponivel em um intervalo de dia e hora, pois poderam acontecer viagens de mais de um dia.

Abaixo segue meu código sou bem iniciante e toda ajuda seria muito bem vinda.

Já criei um posto sobre isso, mas mudei a tabela e naquele post não consegui resolver

agredeço a ajuda, batendo o desespero já

CREATE TABLE DADOSPESSOAS(
	IDDADOSPESSOAS INT PRIMARY KEY AUTO_INCREMENT,
	NOME VARCHAR(45) NOT NULL,
	EMAIL VARCHAR(45) UNIQUE NOT NULL,
	NIVEL CHAR(1) NOT NULL,
	DATANASCIMENTO DATE NOT NULL,
	SEXO CHAR(1) NOT NULL,
	CPF CHAR(14) UNIQUE NOT NULL,
	CELULAR VARCHAR(14) UNIQUE NOT NULL,
	CEP CHAR (9) NOT NULL,
	RUA VARCHAR(30) NOT NULL,
	NUMERO VARCHAR(8) NOT NULL,
	BAIRRO VARCHAR(25) NOT NULL,
	CIDADE VARCHAR(40) NOT NULL,
	ESTADO CHAR(2) NOT NULL
);

CREATE TABLE MOTORISTA (
	IDMOTORISTA INT PRIMARY KEY AUTO_INCREMENT,
	NUMEROREGISTRO VARCHAR(10) UNIQUE NOT NULL,
	VALIDADE DATE NOT NULL,
	ID_DADOSPESSOAS INT
);


CREATE TABLE ADMIN(
	IDADMIN INT PRIMARY KEY AUTO_INCREMENT,
	SENHA VARCHAR(12) NOT NULL,
	ID_DADOSPESSOAS INT
);

CREATE TABLE VIATURA (
	IDVIATURA INT PRIMARY KEY AUTO_INCREMENT,
	TIPOVEICULO VARCHAR(45) NOT NULL,
	MARCA VARCHAR(25) NOT NULL,
	MODELO VARCHAR(25) NOT NULL,
	COR VARCHAR(25) NOT NULL,
	ANOFABRICACAO CHAR(4) NOT NULL,
	PLACA CHAR(8) UNIQUE NOT NULL,
	RENAVAN CHAR(11) UNIQUE NOT NULL,
	PASSAGEIROS CHAR(2) NOT NULL

);

CREATE TABLE VIAGENS (
	IDVIAGENS INT PRIMARY KEY AUTO_INCREMENT,
	CIDADE VARCHAR(25) NOT NULL,
	DATAHORAINICIO DATETIME NOT NULL,
	DATAHORAFINAL DATETIME NOT NULL,
	COR VARCHAR(15) NOT NULL,
	CEP CHAR(9) NOT NULL,
	RUA VARCHAR(30) NOT NULL,
	NUMERO VARCHAR(8) NOT NULL,
	BAIRRO VARCHAR(25) NOT NULL,
	ESTADO CHAR(2) NOT NULL,
	DESCRICAO VARCHAR(200),
	ID_DADOSPESSOAS INT,
	ID_MOTORISTA INT,
	ID_VIATURA INT
);

CREATE  TABLE  PASSAGEIRO (
	IDPASSAGEIRO INT  PRIMARY KEY AUTO_INCREMENT,
	ID_DADOSPESSOAS INT ,
	ID_VIAGEM INT
);


	ALTER TABLE VIAGENS
	ADD CONSTRAINT FK_DADOSPESSOAS_VIAGENS
	FOREIGN KEY (ID_DADOSPESSOAS)
	REFERENCES DADOSPESSOAS(IDDADOSPESSOAS) ON DELETE CASCADE ON UPDATE CASCADE;

	ALTER TABLE VIAGENS
	ADD CONSTRAINT FK_MOTORISTA_VIAGENS
	FOREIGN KEY (ID_MOTORISTA)
	REFERENCES MOTORISTA(IDMOTORISTA)ON DELETE CASCADE ON UPDATE CASCADE;

	ALTER TABLE VIAGENS
	ADD CONSTRAINT FK_VIATURA_VIAGENS
	FOREIGN KEY (ID_VIATURA)
	REFERENCES VIATURA(IDVIATURA)ON DELETE CASCADE ON UPDATE CASCADE;

	ALTER TABLE MOTORISTA
	ADD CONSTRAINT FK_DADOSPESSOAS_MOTORISTA
	FOREIGN KEY (ID_DADOSPESSOAS)
	REFERENCES DADOSPESSOAS(IDDADOSPESSOAS)ON DELETE CASCADE ON UPDATE CASCADE;

	ALTER TABLE ADMIN
	ADD CONSTRAINT FK_DADOSPESSOAS_ADMIN
	FOREIGN KEY (ID_DADOSPESSOAS)
	REFERENCES DADOSPESSOAS(IDDADOSPESSOAS)ON DELETE CASCADE ON UPDATE CASCADE;

	ALTER TABLE PASSAGEIRO
	ADD CONSTRAINT FK_DADOSPESSOAS_PASSAGEIRO
	FOREIGN KEY (ID_DADOSPESSOAS)
	REFERENCES DADOSPESSOAS (IDDADOSPESSOAS)ON DELETE CASCADE ON UPDATE CASCADE;

	ALTER TABLE PASSAGEIRO
	ADD CONSTRAINT FK_VIAGENS_PASSAGEIRO
	FOREIGN KEY (ID_VIAGEM)
	REFERENCES VIAGENS (IDVIAGENS)ON DELETE CASCADE ON UPDATE CASCADE;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Vagner Nunes
      Prezados,
       
      Tenho um ambiente, que tem cerca de uns 80 sites publicados, o problema que está ocorrendo, que além da lentidão, hora aparece a mensagem A connection attempt failed because the connected party did nor properly respond a period of time, or established connection failed because connected host has failed to respond. 
       
      Neste ambiente, as minhas páginas são em ASP.NET com C#, com conexão ao banco de dados MySql.
       
      Não sei como proceder nesta situação, poderiam me ajudar?
       

       
    • Por Fábio.info7
      Olá pessoal, estou precisando de uma grande ajuda, tenho duas tabelas no postgres, são elas: PESSOA e a outra é  ENDERECOS, elas estão relacionadas, oq acontece é que no php eu preciso recuperar o valor do id através da função nextval('nome_da_sequnce'), e não estou sabendo fazer, preciso recuperar o ultimo id e depois realizar o insert nas tabelas relacionadas, poderiam me dar um exemplo de como implementar isso? abaixo deixo o meu codigo php, acredito que esteja errado pois não esta gravando no banco.
       
      Minhas tabelas do banco: CREATE TABLE public.pessoa ( codigo_aluno integer NOT NULL DEFAULT nextval('pessoa_codigo_aluno_seq'::regclass), cpf character varying(11) COLLATE pg_catalog."default" NOT NULL, nome character varying(30) COLLATE pg_catalog."default" NOT NULL, sexo character varying(30) COLLATE pg_catalog."default" NOT NULL, nascimentodata date NOT NULL, email character varying(50) COLLATE pg_catalog."default" NOT NULL, endereco integer, CONSTRAINT pessoa_pkey PRIMARY KEY (codigo_aluno), CONSTRAINT pessoa_endereco_fkey FOREIGN KEY (endereco) REFERENCES public.enderecos (codigo_endereco) ) CREATE TABLE public.enderecos ( codigo_endereco integer NOT NULL DEFAULT nextval('enderecos_codigo_endereco_seq'::regclass), logradouro character varying(200) COLLATE pg_catalog."default" NOT NULL, bairro character varying(80) COLLATE pg_catalog."default" NOT NULL, cidade character varying(100) COLLATE pg_catalog."default" NOT NULL, uf character varying(2) COLLATE pg_catalog."default" NOT NULL, cep character varying(20) COLLATE pg_catalog."default" NOT NULL, CONSTRAINT enderecos_pkey PRIMARY KEY (codigo_endereco) ) ****** ABAIXO O PHP *************************************** <?php try { require_once "conexao.php"; $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT); $sql = "select nextval('pessoa_codigo_aluno_seq')"; $seq = $conn->prepare($sql); $id = $seq->execute(); $id = $seq->fetchAll(PDO::FETCH_ASSOC); $sql = "insert into pessoa (cpf, nome, sexo, nascimentodata, email, endereco ) values (:cpf, :nome, :sexo, :nascimentodata, :email, :fk_endereco )"; $inserir = $conn->prepare($sql); $inserir->bindParam(":cpf", $dados["cpf"]); $inserir->bindParam(":nome", $dados["nome"]); $inserir->bindParam(":sexo", $dados["sexo"]); $inserir->bindParam(":nascimentodata", $dados["nascimentodata"]); $inserir->bindParam(":email", $dados["email"]); $inserir->bindParam(":fk_endereco", $id['codigo_endereco']); $inserir->execute(); // Gravando dados de endereço $sql_end = "insert into enderecos (codigo_endereco, logradouro, bairro, cidade, uf, cep, pessoa )values(:codigo_endereco, :logradouro,:bairro,:cidade,:uf,:cep, :pessoa)"; $end = $conn->prepare($sql_end); $end->bindParam(":codigo_endereco", $id['codigo_endereco']); $end->bindParam(":logradouro", $dados["logradouro"]); $end->bindParam(":bairro", $dados["bairro"]); $end->bindParam(":cidade", $dados["cidade"]); $end->bindParam(":uf", $dados["uf"]); $end->bindParam(":cep", $dados["cep"]); $end->execute(); echo "Dados gravados com sucesso!"; } catch (Exception $e) { echo "Mensagem: " . $e->getMessage() . "<br/>"; echo "Linha do Erro: " . $e->getLine() . "<br/>"; } PRECISO CONSEGUIR INSERIR OS DADOS NAS DUAS TABELAS INSERINDO OS IDS RECUPERADOS PELO NEXTVAL()
    • Por luisfeliperm2
      Quero selecionar 10 noticias do banco de dados, irei utilizar paginação, então na próxima pagina será selecionada da 11-20, 21-30. Só que em todos esses select eu quero que venha a noticia principal que é definida pela coluna "destaque".  O motivo é que eu não quero usar 2 select pra buscar noticias.
      Pra ser bem resumido, eu quero selecionar a noticia principal e depois selecionar mais 10 que podem ser qualquer uma
       
      Tentei da seguinte forma:
      select * from news where destaque = true UNION select * from news ORDER BY id DESC LIMIT 10 OFFSET 1;
    • Por cleitonkloc
      Olá, estou desenvolvendo um banco de dados para coletar informações e relatar para a Diretoria as despesas e custos dos veículos.
      Estou um pouco enferrujado, devido minha área atualmente ser a contabilidade.
       
      Preciso que quando informado a Placa do veículo ao descer para o próximo input seja informado o tipo de combustível que aquele veículo utiliza (variando entre Gasolina e Diesel) puxando do cadastro do veículo.
      Por exemplo: Selecionei a placa MMA5554 e ao descer para o próximo input ou na hora que selecionar a placa ele busca no bando de dados e informa o tipo de combustível (para evitar erro no lançamento e facilitar o registro).
      <label>VEÍCULO:</label><br/> <select class="campo_digitar" name="veiculo"> <option>-- Selecione --</option> <?php $consultasql = "SELECT * FROM kloc_panelcontrol.veiculo order by id "; $lista_empresa = $con->query($consultasql); while ($dados = $lista_empresa->fetch()) { ?> <option value="<?php echo $dados['id'];?>"><?php echo $dados['placa'];?></option> <?php } ?> </select><br/> <label>TIPO DE COMBUSTÍVEL:</label><br/>  
    • Por rafaelwww
      Sou novo no fórum e essa é a minha primeira postagem.
      não sei se essa é área apropriada para esse tipo de postagem, mas vamos lá eu tenho um site e queria criar uma opção no qual o usuário poderia gravar um áudio que seria salvo em um banco de
      dados, mas não tenho ideia de como fazer isso se existe uma API que faça isso . 
      Peço por gentileza se alguém pudesse me dar uma dica.
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.