Tabela é uma estrutura que pode armazenar dados. Todos os dados são armazenados em colunas e linhas. O tipo de dados de cada coluna é definido explicitamente.
Nomeando uma tabela
Essas regras se aplicam a tabelas, visualizações, índices e todos os objetos de banco de dados, incluindo as constraints de uma tabela, se houver alguma. As mesmas regras de nomenclatura também se aplicam às colunas de uma tabela. Todas as tabelas têm um nome. Cada tabela consiste em uma ou mais colunas e cada coluna tem um nome. (Para esse assunto, cada objeto de banco de dados no banco de dados tem seu próprio nome – cada índice, view, constraint, sinônimo e objeto no banco de dados tem um nome.) Quando você usa a palavra-chave SQL CREATE para criar um objeto de banco de dados, você cria um nome e atribua-o ao objeto e, às vezes – como no caso de uma tabela – a componentes individuais dentro do objeto, como as colunas de uma tabela. Há um conjunto específico de regras para nomear objetos de banco de dados – incluindo tabelas, colunas de tabelas, views – qualquer coisa que você precise nomear no banco de dados. A próxima seção analisa essas regras de nomenclatura.
Regras Básicas de Nomeação de um Objeto no banco de dados
As regras para nomear tabelas e qualquer objeto de banco de dados incluem o seguinte:
- O comprimento do nome deve ter pelo menos 1 caractere e não mais que 30 caracteres.
- O primeiro caractere em um nome deve ser uma letra.
- Após a primeira letra, os nomes podem incluir letras, números, o sinal de dólar ($), o sublinhado (_) e o sinal de libra (#), também conhecido como cerquilha ou hashtag. Nenhum outro caractere especial é permitido em nenhum lugar do nome.
- Os nomes não diferenciam maiúsculas de minúsculas
- Os nomes não podem ser palavras reservadas reservadas para uso em instruções SQL, como as palavras reservadas SELECT, CREATE e assim por diante. Veja a lista completa de palavras reservadas no SQL Language Reference Manual da Oracle.
Se você tentar criar uma tabela ou qualquer outro objeto de banco de dados com um nome que viole essas regras, a tentativa falhará, você receberá um código de erro do banco de dados.
Nomes citados
Embora não seja recomendado pela Oracle, é possível criar nomes de objetos de banco de dados que são “entre aspas”. Um nome entre aspas é cercado por aspas duplas, como o objeto “Empresas”. Aqui está um exemplo:
CREATE TABLE "Empresas" (empresa_id number);
Os nomes entre aspas devem sempre ser referenciados entre aspas.
select * from "Empresas";
Os nomes citados variam de não citados de várias maneiras. Por exemplo, nomes entre aspas podem começar com qualquer caractere. Os nomes podem incluir espaços.
create table "Funcionarios da Empresa"
(id_func number, nome varchar2(100) );
Os nomes citados diferenciam maiúsculas de minúsculas. Por exemplo, agora que eu criei uma tabela chamada “Funcionarios da empresa”, esta consulta funcionará:
select * from "Funcionarios da Empresa";
Mas da forma abaixo não vai funcionar:
select * from "FUNCIONARIOS DA EMPRESA";
Os nomes citados podem incluir palavras reservadas. E para reiterar, os nomes entre aspas devem sempre ser referenciados entre aspas. Geralmente, a maioria dos objetos de banco de dados é criada sem o uso de aspas duplas, e a Oracle desaconselha seu uso. Mas é bom saber como usá-los.
Criando Tabelas
O exame espera que você possa reconhecer o código correto para além de criar uma tabela, definir o nome da tabela, nomes de colunas, tipos de dados e quaisquer restrições relevantes. Para criar uma tabela, usamos o comando SQL CREATE TABLE. A palavra CREATE é uma palavra reservada SQL que pode ser combinada com praticamente qualquer objeto de banco de dados (mas não todos) para formar um comando SQL. A sintaxe da instrução CREATE objectType é mostrada nesta listagem de códigos:
Create objectType objectName attributes;
- objectType é uma referência a um objeto listado na Tabela 1 abaixo. Aqui estão algumas exceções: Você não pode criar uma CONSTRAINT dessa maneira. Além disso, enquanto CREATE PRIVATE SYNONYM objectName estiver correto, use simplesmente CREATE SYNONYM objectName para sinônimos públicos, nunca CREATE PUBLIC SYNONYM objectName, que é o modo incorreto.
- objectName é um nome que você especifica de acordo com as regras e diretrizes de nomenclatura que já foi descrita no início dessa página.
- atributos varia de zero a uma série de cláusulas exclusivas para cada tipo de objeto individual, que analisaremos mais tarde.
| Tabela 1 – objetos schema | objetos nonschema |
|---|---|
| Tables | Users |
| Constraints | Roles |
| Indexes | Public Synonyms |
| Views | |
| Sequences | |
| Private Synonyms |
Um dos usos mais frequentes do comando SQL CREATE é criar uma TABLE. Ao criar uma tabela, você também criará as colunas da tabela e, opcionalmente, alguns objetos associados. Vejamos um exemplo de uma instrução CREATE TABLE básica:
CREATE TABLE work_schedule
(work_schedule_id NUMBER,
start_date DATE,
end_date DATE);
Se você executasse esse comando em um esquema que ainda não tivesse uma tabela chamada work_schedule (isso é importante), obteria o resultado: table created, quer dizer que a tabela foi criada com sucesso.
A instrução SQL CREATE TABLE é uma instrução complexa com muitas cláusulas e parâmetros. O exame testa apenas algumas de suas funcionalidades, incluindo como criar colunas, especificar tipos de dados para essas colunas e criar restrições. Aqui está um exemplo de uma instrução CREATE TABLE relativamente simples:
CREATE TABLE cruises (
cruise_id NUMBER,
cruise_type_id NUMBER,
cruise_name VARCHAR2(20),
captain_id NUMBER NOT NULL,
start_date DATE,
end_date DATE,
status VARCHAR2(5) DEFAULT 'DOCK',
CONSTRAINT cruise_pk PRIMARY KEY (cruise_id) );
Neste exemplo, você está criando uma tabela com sete colunas e duas restrições. Cada uma das colunas recebe um nome e um tipo de dados. Os tipos de dados fornecem algumas regras e requisitos para os dados inseridos nas colunas. Por exemplo, apenas números podem ser inseridos em CRUISE_TYPE_ID. Somente valores de data podem ser inseridos em START_DATE. Observe que a coluna STATUS possui um valor padrão de ‘DOCK’. Se uma instrução INSERT omitir o valor para STATUS, ‘DOCK’ será o valor para STATUS.
No final da instrução CREATE TABLE, há uma linha adicional que cria uma CONSTRAINT que define a coluna CRUISE_ID como uma chave primária. Também há uma restrição NOT NULL aplicada à coluna CAPTAIN_ID. Esse CONSTRAINT não tem um nome explícito, mas é um CONSTRAINT, e receberá um nome gerado pelo sistema.
Referências
OCA Oracle Database SQL Exam Guide. Páginas 93 – 102