Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como criar tabela no oracle


Este artigo fala sobre como criar tabela no Oracle, chave primária, chaves estrangeiras, criar sintaxe de tabela no oracle com exemplos. Isso será muito útil para Oracle DBAs e Developer. Eles brincam com ele muitas vezes ao dia e um bom conhecimento pode definitivamente ajudá-los a agilizar a tarefa. Eles geralmente ficam confusos sobre o tipo de dados e o que usar em quais circunstâncias. Aqui estou tentando dar uma visão geral de todas as coisas úteis para tabelas de banco de dados Oracle

O que é Tabela de banco de dados Oracle?


-Tabelas são a unidade básica de armazenamento de dados em um banco de dados Oracle. Os dados são armazenados em linhas e colunas.

-Uma mesa contém todo o necessário sobre algo no mundo real

-A tabela contém um conjunto de colunas. Uma coluna representa um tipo de dados na tabela, por exemplo, a coluna de salário na tabela EMP terá os salários
  • Uma linha é uma coleção de informações de coluna correspondentes a um único registro.

A seguir, falaremos em detalhes sobre a instrução de criação de tabela do Oracle

Como criar uma tabela no  oracle


Para criar uma tabela no banco de dados, devemos ter as seguintes informações
  • O nome da tabela
  • Tipo de tabela
  • Restrições
  • parâmetro de armazenamento de tabela

Vejamos cada um deles em detalhes

Convenções de nomenclatura de tabela para Oracle criar tabela

  • O nome escolhido para uma tabela deve seguir estas regras padrão:
  • O nome deve começar com uma letra A-Z ou a-z
  • Pode conter números e sublinhados
  • Pode estar em MAIÚSCULAS ou minúsculas
  • Pode ter até 30 caracteres. Com 12.2, foi estendido para 128 caracteres
  • Não é possível usar o mesmo nome de outro objeto existente em seu esquema
  • Não deve ser um servidor Oracle e uma palavra reservada SQL
  • Nome da coluna, tipos de dados de coluna e tamanhos de coluna.

Convenções de nomenclatura de colunas –

  • O nome escolhido para uma coluna deve seguir estas regras padrão:
  • O nome deve começar com uma letra A-Z ou a-z
  • Pode conter números e sublinhados
  • Pode estar em MAIÚSCULAS ou minúsculas
  • Pode ter até 30 caracteres. Com 12,2, foi estendido para 128 caracteres
  • Não é possível usar o mesmo nome de outro objeto existente em seu esquema
  • Não deve ser um servidor Oracle e uma palavra reservada SQL

Tipo de tabela


Tabela comum (organizada por heap)

-Este é o tipo básico de uso geral de mesa.

-Seus dados são armazenados como uma coleção não ordenada (heap)

Tabela em cluster

-Uma tabela clusterizada é uma tabela que faz parte de um cluster.

-Um cluster é um grupo de tabelas que compartilham os mesmos blocos de dados porque compartilham colunas comuns e geralmente são usados ​​juntos.

Tabela organizada por índice

-Ao contrário de uma tabela comum (organizada por heap), os dados de uma tabela organizada por índice são armazenados em uma estrutura de índice de árvore B de maneira classificada por chave primária.

-Além de armazenar os valores de coluna de chave primária de uma linha de tabela organizada por índice, cada entrada de índice na árvore B armazena também os valores de coluna não chave.

Tabela particionada

–As tabelas particionadas do Oracle permitem que seus dados sejam divididos em partes menores e mais gerenciáveis ​​chamadas partições ou até mesmo subpartições.
  • Cada partição pode ser gerenciada individualmente e pode operar independentemente das outras partições, fornecendo assim uma estrutura que pode ser melhor ajustada para disponibilidade e desempenho.

Tabela externa

As tabelas externas da Oracle permitem que a Oracle consulte dados armazenados fora do banco de dados em arquivos simples.

Tabela temporária global

Os dados em uma tabela temporária global são privados, de modo que os dados inseridos por uma sessão só podem ser acessados ​​por essa sessão. As linhas específicas da sessão em uma tabela temporária global podem ser preservadas para toda a sessão ou apenas para a transação atual

Restrições e regras


Você pode especificar regras para cada coluna de uma tabela. Essas regras são chamadas de restrições de integridade. Um exemplo é uma restrição de integridade não nula. Essa restrição força a coluna a conter um valor em cada linha. Essas regras são aplicadas para cada coluna ou conjunto de colunas. Sempre que a tabela participa da ação de dados, essas regras são validadas e geram exceções em caso de violação.

Uma restrição pode ser uma das seguintes:
  • uma restrição no nível da coluna

As restrições de nível de coluna referem-se a uma única coluna na tabela e não especificam um nome de coluna (exceto restrições de verificação). Referem-se à coluna que seguem.
  • uma restrição no nível da tabela

As restrições de nível de tabela referem-se a uma ou mais colunas na tabela. As restrições de nível de tabela especificam os nomes das colunas às quais se aplicam. As restrições CHECK em nível de tabela podem se referir a 0 ou mais colunas na tabela.

Os tipos de restrição disponíveis são NOT NULL, Primary Key, Unique, Check e Foreign Key.

Chave primária

Uma chave primária no Oracle é uma coluna em uma  tabela cujos valores identificam exclusivamente a linha na tabela. Um valor de chave primária:

a) Deve identificar de forma única a linha;

b) não pode ter valores NULL;

O Oracle cria internamente um índice oracle exclusivo para evitar a duplicação nos valores da coluna. Pode ser definido no nível da coluna ou da tabela

Uma chave primária também pode ter várias colunas

Chave exclusiva

Chave única no Oracle significa exclusividade para a coluna. O servidor Oracle não permitirá valores duplicados na coluna com restrições exclusivas. O Oracle cria internamente um índice exclusivo para evitar duplicação nos valores da coluna. Mas permite que alguns valores sejam nulos. Pode ser definido no nível da coluna ou da tabela

Chave estrangeira

-Uma chave estrangeira no Oracle é uma restrição referencial entre duas tabelas.

-Uma restrição de chave estrangeira valida os valores de um INSERT ou UPDATE em relação aos valores em outra coluna, seja em uma tabela diferente ou em outra coluna na mesma

-Uma chave estrangeira sempre define um relacionamento pai/filho. O “pai” é a coluna referenciada na chave estrangeira e o “filho” é a coluna ou colunas que contêm a restrição de chave estrangeira.

-Geralmente, porém, uma chave estrangeira é um campo (ou campos) que aponta para a chave primária de outra tabela.
-Ela pode ser definida no nível da coluna ou da tabela

Verificar restrição

Uma restrição do Oracle Check requer um valor no banco de dados para obedecer a uma condição especificada. A restrição de verificação permite impor uma regra condicional em uma coluna, que deve ser validada antes que os dados sejam inseridos na coluna. A condição não deve conter uma subconsulta ou pseudocoluna CURRVAL NEXTVAL, LEVEL, ROWNUM ou SYSDATE.

O Oracle permite que uma única coluna tenha mais de uma restrição CHECK. Na verdade, não há limite prático para o número de restrições CHECK que podem ser definidas para uma coluna.

Pode ser definido no nível da coluna ou da tabela

Não nulo

Isso significa que uma linha de dados deve ter um valor para a coluna especificada como NOT NULL. O servidor Oracle não permitirá o armazenamento de linhas que violem essa restrição. Ele só pode ser definido no nível da coluna e não no nível da tabela.

Parâmetro de armazenamento de tabela


As tabelas são armazenadas no Oracle Tablespace no banco de dados. Se nenhum Tablespace for especificado, a tabela entrará no Tablespace padrão do usuário.

Resumindo

1) Você precisa escolher o nome da coluna e o nome da tabela apropriados de acordo com o padrão fornecido acima. Recomenda-se fornecer o nome da coluna e o nome da tabela de forma que você possa identificar a finalidade verificando os nomes

2) Em segundo lugar, você deve escolher o tipo de dados Oracle correto para a tabela.
Se for uma string de caracteres, devemos escolher VARCHAR2 (10). Esta é uma string variável, devemos escolher o valor adequadamente. Isso significa que ele pode armazenar caracteres de até 10 bytes. O espaço utilizado dependerá dos valores da coluna e não haverá desperdício de espaço.

Gostaria de enfatizar aqui uma coisa que quando damos VARCHAR2(10) aqui 10 é o número de bytes, não o caractere.
Número de caractere e bytes são semelhantes quando o caractere ASCII está envolvido, mas a equação é alterada, nós comece a usar caracteres diferentes de ASCII

Agora VARCHAR2 suporta 4000 bytes, se sua coluna for maior que isso, você pode usar o tipo de dados LOB, que pode armazenar texto para bytes GIGA.

Se for um número, usamos o tipo de dados Number. Novamente podemos escolher o valor apropriadamente. Número de exemplo(6,2) Isso pode conter um máximo de 999999,99

Se você deseja armazenar a data, a Oracle forneceu o tipo de dados de data para armazenamento.

3) Identifique a restrição na tabela. Decida qual será a chave primária e quais colunas não seriam nulas.

Assim que tivermos todas as informações necessárias, podemos avançar com a criação da tabela

Oracle cria a sintaxe da tabela

CREATE TABLE table_name
(
col1 datatype [ NULL | NOT NULL ],
col2 datatype [ NULL | NOT NULL ],
...
col_n datatype [ NULL | NOT NULL ]
)  tablespace <tablepace name>;

SINTAXE para oracle cria a chave primária de tabela . Pode ser definido no nível da coluna ou no nível da tabela

Table level
CREATE TABLE table_name
(
col1 datatype [ NULL | NOT NULL ],
col2 datatype [ NULL | NOT NULL ],
...
col_n datatype [ NULL | NOT NULL ]
constraint <name> primary key (col1,col2)
)  tablespace <tablepace name>

Column Level

CREATE TABLE table_name
(
col1 datatype [ NULL | NOT NULL ] constraint <name> primary key
,
col2 datatype [ NULL | NOT NULL ],
...
col_n datatype [ NULL | NOT NULL ]
)  tablespace <tablepace name>


Exemplo da chave primária de criação de tabela da Oracle
CREATE TABLE SCOTT.TEST
(
Created_by date,          SOURCE CHAR(10),
REQUEST_ID CHAR(64) NOT NULL CONSTRAINT TEST_PK PRIMARY KEY,
COMMENTS VARCHAR(3000)
);

CREATE TABLE TESTEXP
(
INV_ID CHAR(7) NOT NULL,
ITEM_ID CHAR(7) NOT NULL,           CREATED  date,
WHO CHAR(7),          CONSTRAINT TEST1_PK PRIMARY KEY (INV_ID,ITEM_ID)
);


Oracle cria índice para impor as restrições de chave primária

Relacionado:perguntas da entrevista da Oracle

A explicação para a tabela TEST1
1 A primeira coluna é chamada  inv_id   que é criado como um tipo de dados char (máximo de 7 dígitos) e não pode conter valores nulos
2 A segunda coluna é chamada  item_id   que é criado como um tipo de dados char (máximo de 7 dígitos) e não pode conter valores nulos
3 A terceira coluna é chamada de criada que é uma data tipo de dados e também pode conter valores nulos.
4 A quarta coluna é chamada who , que é um tipo de dados char e também pode conter valores nulos.
5 A restrição de chave primária no nível da tabela TEST1_PK é definida na chave composta (INV_ID, ITEM_ID)

SYNTAX  para oracle create Table instrução FOREIGN Key. Pode ser definido no nível da coluna ou no nível da tabela

CREATE TABLE table_name
(
col1 datatype [ NULL | NOT NULL ],
col2 datatype [ NULL | NOT NULL ],
...
col_n datatype [ NULL | NOT NULL ]
constraint <name> FOREIGN KEY (col1,col2) REFERENCES table(col1,col2)
)  tablespace <tablepace name>

CREATE TABLE table_name
(
col1 datatype [ NULL | NOT NULL ] constraint <name> primary key
,
col2 datatype [ NULL | NOT NULL ],
...
col_n datatype [ NULL | NOT NULL ]
)  tablespace <tablepace name>;



CREATE TABLE dept
( dept_id number(10) NOT NULL,
dept_name varchar2(50) NOT NULL,
CONSTRAINT dept_pk PRIMARY KEY (dept_id)
);

CREATE TABLE emp
( emp_no number(10) NOT NULL,
emp_name varchar2(50) NOT NULL,
dept_id number(10),
sal number(6),
CONSTRAINT emp_pk PRIMARY KEY (emp_no),
CONSTRAINT dept_fk
FOREIGN KEY (dept_id)
REFERENCES dept(dept_id) );


Explicação da tabela EMP
1 A primeira coluna é chamada EMP_NO que é criado como um número e não pode conter valores nulos
2 A segunda coluna é chamada emp_name que é criado como varchar2(50) e não pode conter valores nulos
3 A terceira coluna é chamada de dept_id que é um número.
4 A quarta coluna é chamada sal que é um tipo de dados numérico e também pode conter valores nulos.
5 A restrição de chave primária no nível da tabela EMP_PK é definida na chave  (EMP_NO)
6 Restrições de chave estrangeira no nível da tabela dept_fk que fazem referência à tabela dept dept_id

Privilégio necessário para oracle criar tabela


-Você deve ter o privilégio de sistema create table para criar uma nova tabela em seu esquema,
  • Você precisa ter o privilégio de sistema create any table para  criar uma tabela no esquema de outro usuário. Além disso, o proprietário da tabela precisa ter uma cota para o tablespace que contém a tabela ou o privilégio de sistema UNLIMITED TABLESPACE 
l>
Relacionado:Como escrever consultas sql

Outras características associadas à tabela de banco de dados oracle


Cache/sem cache

Use as cláusulas CACHE para indicar como o Oracle Database deve armazenar blocos no cache de buffer. Se você não especificar nada no comando create table, por padrão é sem cache

PADRÃO

O valor inserido na coluna se a inserção ou atualização deixar o valor da coluna NULL.

| NULO>

PARALELO

Especifique PARALLEL se desejar que o Oracle selecione um grau de paralelismo igual ao número de CPUs disponíveis em todas as instâncias participantes vezes o valor do parâmetro de inicialização PARALLEL_THREADS_PER_CPU.

Compactar

Isso é usado pelo oráculo para armazenar a tabela em formato compactado. Está disponível a partir de 11g

Comente uma tabela ou coluna

Você pode comentar a tabela usando o comando
COMMENT ON TABLE <table_name> IS '<comment>';

Oracle cria tabela com valor padrão


Às vezes, você deseja atribuir um valor padrão à coluna se não for especificado na instrução de inserção, então você pode criar a tabela com a sintaxe abaixo. DEFAULT é a palavra-chave usada
CREATE TABLE EXP
(
NAME VARCHAR2(20),
SAL number(8,2) DEFAULT 800,
hire_date DATE DEFAULT SYSDATE ,
birthdate DATE DEFAULT SYSDATE -10
)

O Oracle cria alterações no valor padrão da tabela em 12c


Colunas de IDENTIDADE
No Oracle Database 12c, podemos definir as colunas da tabela com a palavra-chave SQL IDENTITY, que é uma palavra-chave SQL do American National Standards Institute (ANSI). Que são incrementados automaticamente no momento da inserção (como no MySQL).
Example:
create table test
(
id number generated as identity,
name varchar2(100),
email varchar2(100),
password varchar2(100),
firstname varchar2(100),
lastname varchar2(100)
);
Sequence as Default Value
With Oracle Database 12c, we can directly assign sequence nextval as a default value for a column, So you no longer need to create a trigger to populate the column with the next value of sequence, you just need to declare it with table definition.It is a sort of auto-increment feature for a column in oracle just like MySQL
Example:
create sequence tech_test_seq start with 1 increment by 1 nocycle;create table test
(
id number default tech_test_seq.nextval primary key
name varchar(30)
);

Valores PADRÃO somente de metadados

Antes do Oracle 11g, adicionar uma nova coluna a uma tabela existente exigia que todas as linhas dessa tabela fossem modificadas para adicionar a nova coluna. Portanto, se a tabela for muito grande, alterar a tabela adicionar coluna levou um tempo substancial e tempo de bloqueio, como também mais

Com o Oracle, o 11g introduziu o conceito de valores padrão somente de metadados. Adicionar uma coluna NOT NULL com uma cláusula DEFAULT a uma tabela existente envolveu apenas uma alteração de metadados, em vez de uma alteração em todas as linhas da tabela. As consultas da nova coluna foram reescritas pelo otimizador para garantir que o resultado fosse consistente com a definição padrão.

Leia mais sobre isso no artigo abaixo

Como alterar a tabela adicionar coluna oracle

O Oracle 12c leva isso um passo adiante, permitindo valores padrão somente de metadados de colunas obrigatórias e opcionais. Como resultado, adicionar uma nova coluna com uma cláusula DEFAULT a uma tabela existente será tratada como uma alteração somente de metadados, independentemente de essa coluna ser definida como NOT NULL ou não.

Este é um grande benefício para todos.

Tabelas e visualizações do dicionário de dados


Todas as informações de tabela e coluna são armazenadas nas tabelas SYS.TAB$ e SYS.COL$. A Oracle forneceu visualizações de dicionário de dados  para obter informações sobre tabelas e colunas

Existem três categorias de visualizações

Como listar todas as tabelas no Oracle

To list all tables owned by the current user, type:
select tablespace_name, table_name from user_tables;

To list all tables in a database:

select tablespace_name, table_name from dba_tables;

To list all tables accessible to the current user, type:

select tablespace_name, table_name from all_tables

To describe the table in SQLPLUS

desc <table_name>

Como determinar o tamanho da tabela

select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024,2) as "Object Size (Mb)"
, tablespace_name as "Tablespace"
from dba_segments
where segment_name=’<table_name>’;

Tabelas com número de linhas e comentários


A consulta abaixo pode ser usada para encontrar a contagem de linhas e comentários no esquema SCOTT
select tab.owner as schema_name,
tab.table_name as table_name,
obj.created,
obj.last_ddl_time as last_modified,
tab.num_rows,
tab.last_analyzed,
comm.comments
from all_tables tab
inner join all_objects obj
on obj.owner = tab.owner
and obj.object_name = tab.table_name
left outer join all_tab_comments comm
on tab.table_name = comm.table_name
and tab.owner = comm.owner
where tab.owner = 'SCOTT'
order by tab.owner,
tab.table_name;

Perguntas frequentes sobre a tabela de criação do Oracle

1. O oracle criou ou substituiu o comando oracle de tabela?
O Oracle não possui o comando oracle create ou replace table. Criar ou substituir é válido apenas para visualizações, PLSQL:apenas procedimentos. Você precisa fazer a alteração usando apenas o comando ALTER Table
Ou você pode remover explicitamente a tabela e criá-la novamente
2. Temos alguma cláusula como oracle create table se não existir?
não temos nenhum direto, mas você pode usar PLSQL para emular isso
SET SERVEROUTPUT ON
DECLARE c_emp int:=0;
BEGIN SELECT count(*) em c_emp FROM dba_tables onde table_name ='EMP';
if c_emp<=0
EXECUTE IMMEDIATE 'cria tabela EMP ( ID NUMBER(3), NAME VARCHAR2( 30) NOT NULL,SAL NUMBER*,2))';
end if;
END;
/

Esquema de amostra para praticar
SQL>CREATE TABLE "DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13),
CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
)

SQL>CREATE TABLE "EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ENABLE
);

SQL> desc emp
Name Null? Type
----------------------------------------- -------- -----------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)

SQL>

SQL> desc dept
Name Null? Type
----------------------------------------- -------- -----------------------

DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)

SQL>

insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'RESEARCH', 'DELHI');
insert into dept values(40, 'RESEARCH', 'MUMBAI');

insert into emp values( 7698, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 );
insert into emp values( 7782, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 );
insert into emp values( 7788, 'Scott', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 );

insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null );
insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 );
insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null );

SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 01-MAY-07 2850 10
7782 CLARK MANAGER 7839 09-JUN-08 2450 10
7788 SCOTT ANALYST 7566 09-JUN-12 3000 20
7789 TPM ANALYST 7566 09-JUN-17 3000
7790 TOM ANALYST 7567 09-JUL-17 4000
7560 T1OM ANALYST 7567 09-JUL-17 4000 20

After the practice is over, you can drop the tables
SQL>drop table emp;

SQL>drop table dept;

Espero que você goste deste artigo sobre a instrução de criação de tabela, comando, sintaxe e dicas do Oracle.

Artigos relacionados
alter table add column oracle :Informações úteis sobre como alterar a tabela add column oracle. Detalhes sobre o recurso de adição rápida de coluna introduzido no oracle 11g também fornecido
DROP TABLE ORACLE :Aprenda sobre soltar tabela no Oracle, descartar tabela se existir no Oracle, descartar várias tabelas em um comando, descartar restrições de cascata de tabela
alterar table move :Confira este post para o método passo a passo sobre Como reconstruir a tabela no oracle usando alter table move, Como reconstruir a tabela com lobs, coluna longa
Truncate TABLE Oracle:Truncate TABLE no Oracle é mais rápido que delete da tabela no oracle. É uma instrução DDL e não aciona os gatilhos de exclusão
Alterar tabela no Oracle:Alterar tabela no oracle é usado para modificar uma coluna, descartar e adicionar restrições, alterar o tipo de dados da coluna da tabela, alterar a tabela parâmetros de armazenamento
oracle list all tables:podemos obter o List All Tables no Oracle consultando all_tables ou user_tables ou dba_tables. podemos selecionar a coluna e a cláusula where conforme a necessidade
Logging complementar no Oracle
funções de data do Oracle sql
https://docs.oracle.com/cd/B19306_01/server.102/ b14231/tables.htm
Criando uma tabela temporária global no Oracle