O comando CREATE TABLE cria uma nova tabela vazia no banco de dados atual. O usuário que executa a instrução torna-se o proprietário da tabela. Após criar a tabela, utilize INSERT para adicionar linhas e ALTER TABLE para modifique sua estrutura ou adicionar restrições.
Sintaxe
CREATE [ GLOBAL TEMPORARY ] TABLE table_name (
{ column_name data_type [ DEFAULT default_expr ]
[ column_constraint [ ... ] ] | table_constraint } [, ...]
)
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
[ TABLESPACE tablespace ]
Em que column_constraint é um dos seguintes:
[ CONSTRAINT constraint_name ]
{ NOT NULL
| NULL
| UNIQUE [ USING INDEX TABLESPACE tablespace ]
| PRIMARY KEY [ USING INDEX TABLESPACE tablespace ]
| CHECK (expression)
| REFERENCES reftable [ ( refcolumn ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
E table_constraint é um dos seguintes:
[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ]
| PRIMARY KEY ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ]
| CHECK ( expression )
| FOREIGN KEY ( column_name [, ...] )
REFERENCES reftable [ ( refcolumn [, ...] ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
Parâmetros
|
Parâmetro |
Descrição |
|
|
Cria uma tabela temporária que é automaticamente removida ao final da sessão atual. Os índices criados em uma tabela temporária também são temporários. Se uma tabela temporária tiver o mesmo nome de uma tabela permanente, a tabela permanente não ficará visível na sessão atual, a menos que seja referenciada pelo nome qualificado com schema. |
|
|
Nome da tabela. Utilize o nome qualificado com schema para referenciar a tabela quando necessário. |
|
|
Nome de uma coluna na tabela. |
|
|
Tipo de dados da coluna. O valor pode incluir especificadores de array. |
|
|
Expressão de valor padrão para a coluna. A expressão não pode conter subconsultas ou referências a outras colunas da tabela, e seu tipo de dados deve corresponder ao tipo de dados da coluna. Se nenhum valor for inserido e nenhum padrão estiver definido, |
|
|
Nome opcional para a restrição de coluna ou de tabela. Se omitido, o sistema gera um nome automaticamente. |
|
|
Impede que a coluna contenha valores |
|
|
Exige que os valores da coluna identifiquem exclusivamente cada linha e sejam não nulos. Uma tabela pode ter apenas uma chave primária. As colunas da chave primária não podem aparecer também em uma restrição |
|
|
Defina uma chave primária composta em várias colunas. |
|
|
Expressão booleana que deve ser avaliada como |
|
|
Defina uma restrição de chave estrangeira. Se |
|
|
Defina uma restrição de chave estrangeira em várias colunas. |
|
|
Ação a ser executada quando uma linha referenciada for excluída. As ações referenciais não podem ser adiadas, mesmo que a restrição seja adiável. Ações suportadas: |
|
|
Determina se a verificação da restrição pode ser adiada para o final de uma transação. Utilize |
|
|
Defina quando uma restrição adiável é verificada. |
|
|
Ação a ser executada em uma tabela temporária no final de um bloco de transação. |
|
|
Tablespace no qual a tabela será criada. |
Notas de uso
Se um nome de schema for incluído (por exemplo,
CREATE TABLE myschema.mytable), a tabela será criada nesse schema; caso contrário, ela será criada no schema atual.Tabelas temporárias sempre existem em um schema dedicado; não especifique um schema ao criar uma.
O nome da tabela deve ser exclusivo dentro do schema — ele não pode duplicar o nome de nenhuma tabela, sequência, índice ou visualização existente.
O comando
CREATE TABLEtambém cria um tipo de dados composto que representa uma linha da tabela. O nome da tabela não pode corresponder ao nome de um tipo de dados existente no mesmo schema.Uma tabela pode ter até 1.600 colunas. Na prática, o limite efetivo pode ser menor devido a restrições de comprimento de tupla.
Uma restrição de coluna aplica-se a uma única coluna. Uma restrição de tabela aplica-se a várias colunas. Para facilitar o gerenciamento, uma restrição de coluna única pode ser escrita em qualquer uma das formas.
O PolarDB cria automaticamente um índice para cada restrição
UNIQUEePRIMARY KEY; não é necessária a criação explícita de índice.
Notas de compatibilidade
O comando CREATE TABLE do PolarDB for Oracle comporta-se de maneira diferente dos bancos de dados Oracle nas seguintes formas:
Temporary table visibility: Tabelas temporárias são visíveis apenas na sessão atual. Esse mecanismo difere do mecanismo de tabela temporária global dos bancos de dados Oracle.
**Padrão de
ON COMMIT**: O comportamento padrão éPRESERVE ROWS. No Oracle, o padrão éDELETE ROWS.
Exemplos
Criar duas tabelas relacionadas
O exemplo a seguir cria uma tabela dept e uma tabela emp com uma chave estrangeira referenciando dept.
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Adicionar uma restrição UNIQUE
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE,
loc VARCHAR2(13)
);
Adicionar uma restrição CHECK no nível de coluna
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Adicionar uma restrição CHECK no nível de tabela
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno),
CONSTRAINT new_emp_ck CHECK (ename IS NOT NULL AND empno > 7000)
);
Definir uma chave primária composta
O exemplo a seguir cria uma tabela jobhist com uma chave primária composta em empno e startdate.
CREATE TABLE jobhist (
empno NUMBER(4) NOT NULL,
startdate DATE NOT NULL,
enddate DATE,
job VARCHAR2(9),
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
chgdesc VARCHAR2(80),
CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate)
);
Definir valores padrão de coluna
A coluna job tem como padrão 'SALESMAN'. A coluna hiredate tem como padrão a data em que a linha é inserida.
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9) DEFAULT 'SALESMAN',
mgr NUMBER(4),
hiredate DATE DEFAULT SYSDATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Criar uma tabela em um tablespace específico
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
) TABLESPACE diskvol1;
Próximos passos
Para modifique a estrutura ou as restrições de uma tabela existente, utilize
ALTER TABLE.Para remover uma tabela, utilize
DROP TABLE.Para adicionar índices além daqueles criados automaticamente para chaves primárias e restrições exclusivas, utilize
CREATE INDEX.Para popular a tabela com dados, utilize
INSERT.