- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 10 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
26 de novembro de 2016 às 11:23 pm #108524eurico raimundoParticipante
Boa tarde. Eu sou novo no banco de dados Oracle e estou fazendo um trabalho.
Eu tenho que criar um View para mostrar:
.Número do Banco
Nome do Banco
Agência
Conta
Nome da conta
Saldo inicial
Saldo atualAs tabelas eu criei e ficaram assim:
CREATE TABLE BANCOS(
NRO_BANCO CHAR (3) NOT NULL,
NOME_BANCO VARCHAR (30),
CONSTRAINT PK_BANCOS PRIMARY KEY (NRO_BANCO)
);CREATE TABLE CONTAS(
NRO_BANCO CHAR (3) NOT NULL,
AGENCIA INTEGER NOT NULL,
CONTA INTEGER NOT NULL,
NOME_CONTA VARCHAR(30),
SALDO_INICIAL NUMERIC (12,2),
SALDO NUMERIC (12,2),
CONSTRAINT PK_CONTAS PRIMARY KEY (NRO_BANCO, AGENCIA, CONTA),
CONSTRAINT FK_BANCOS FOREIGN KEY(NRO_BANCO) REFERENCES BANCOS(NRO_BANCO));
CREATE TABLE FLUXO_CAIXA(
ID INTEGER NOT NULL,
DATA_LANCAMENTO DATE,
NRO_BANCO CHAR (3),
AGENCIA INTEGER,
CONTA INTEGER,
DESCRICAO VARCHAR (50),
TIPO_LANCAMENTO CHAR(1),
VALOR NUMERIC (12,2),
CONSTRAINT PK_FLUXO PRIMARY KEY (ID),
CONSTRAINT FK_NRO_BANCOS FOREIGN KEY(NRO_BANCO, AGENCIA, CONTA) REFERENCES CONTAS (NRO_BANCO,AGENCIA, CONTA)
);Tem como vocês me dar uma ajuda porque eu já tentei de diversas maneiras e não consegui.
Obrigado.29 de novembro de 2016 às 1:09 am #108529José Laurindo ChiappaModeradorBlz ? Então, não vou (por questão de tempo/esforço) te dar uma resposta completa e prontinha, mas ao invés vou Tentar te dar os conceitos pra vc progredir e fazer sozinho – imagino que é Isso que teu professor/orientador quer que vc faça, né ?
Muito bem : para vc ler informações de múltiplas tabelas de uma vez só (o chamado JOIN) vc indica na linha do FROM (que vem depois do SELECT) o nome das tabelas , ** E ** também precisa indicar qual é a CHAVE, ie, qual os dados que estão repetidos nas tabelas….
Vamos começar pela BANCOS e pela CONTAS : pelas constraints dá pra ver que a chave primária única em BANCOS é a coluna NRO_BANCO, e esse mesma coluna tá repetida na CONTAS como chave estrangeira (ie, informação filha, que vêm de outra tabela) – juntando isso, teríamos algo do tipo :SELECT bancos.NRO_BANCO, bancos.NOME_BANCO, CONTAS.AGENCIA, CONTAS.CONTA, CONTAS.nome_conta, CONTAS.saldo_inicial, CONTAS.saldo
FROM BANCOS, CONTAS
WHERE bancos.NRO_BANCO = CONTAS.NRO_BANCO;==> pronto, se vc rodar a consultinha acima vc vai obter o número e o nome de cada banco cadastrado na tabela BANCOS, E cada banco desses vai ter um registro-filho com o mesmo valor de nro_banco que estava em BANCOS repetido na CONTAS : é o que estou especificando na linha WHERE bancos.NRO_BANCO = CONTAS.NRO_BANCO….
Siga fazendo O MESMO (ie, identificando as colunas-chaves, listando as tabelas no FROM, indicando as colunas a serem exibidas no SELECT, tal que nem) para a(s) próxima(s) tabela(s), ok ???
[]s
Chiappa
OBS :
- opcionalmente ao invés de vc prefixar as colunas com o nome completo de cada tabela, pra abreviar é possível vc indicar um ‘apelido’ mais curto pra cada tabela no FROM, e aí prefixar as colunas com esse apelido – por exemplo, se eu apelidar as tabelas de A e B ficaria assim a query :
SELECT a.NRO_BANCO, a.NOME_BANCO, b.AGENCIA, b.CONTA, b.nome_conta, b.saldo_inicial, b.saldo
FROM BANCOS a, CONTAS b
WHERE a.NRO_BANCO = b.NRO_BANCO; -
no RDBMS Oracle é possível vc indicar as colunas-chave na linha/posição do comando WHERE (como eu fiz), que é a sintaxe tradicional do RDBMS Oracle, ** OU ** é possível usar a sintaxe mais ‘nova’, ditada pelo comitê que padroniza a linguagem SQL, com a palavra-chave JOIN ao invés do WHERE : ambas funcionam, vc usa a que achar melhor/gostar mais, eu usei a sintaxe ‘antiga’ porque estou mais acostumado com ela…
==>> SE mesmo depois desta explicação na nova tentativa vc engasgar em algum ponto , MOSTRA PRA GENTE exatamente como vc está fazendo, o texto completinho da sua query, a msg de erro que dá, E manda uns INSERTs com dados, que a gente tenta reproduzir e te mostrar onde vc está errando… Mas PLZ tenta sozinho primeiro, senão vai ser uma Oportunidade de aprendizado perdida …
- opcionalmente ao invés de vc prefixar as colunas com o nome completo de cada tabela, pra abreviar é possível vc indicar um ‘apelido’ mais curto pra cada tabela no FROM, e aí prefixar as colunas com esse apelido – por exemplo, se eu apelidar as tabelas de A e B ficaria assim a query :
-
AutorPosts
- Você deve fazer login para responder a este tópico.