sql >> Base de Datos >  >> RDS >> Oracle

como crear una tabla en oracle

Este artículo habla sobre cómo crear una tabla en Oracle, clave principal, claves externas, crear sintaxis de tablas en Oracle con ejemplos. Esto será muy útil tanto para Oracle DBA como para desarrolladores. Juegan con él muchas veces al día y un buen conocimiento definitivamente puede ayudarlos a acelerar la tarea. A menudo se confunden sobre el tipo de datos y qué usar en qué circunstancias. Aquí estoy tratando de dar una descripción general de todas las cosas útiles para las tablas de la base de datos de Oracle

¿Qué es la tabla de la base de datos de Oracle?

-Las tablas son la unidad básica de almacenamiento de datos en una base de datos Oracle. Los datos se almacenan en filas y columnas.

-Una mesa contiene todo lo necesario sobre algo en el mundo real

-Una tabla contiene un conjunto de columnas. Una columna representa un tipo de datos en la tabla. Por ejemplo, la columna de salario en la tabla EMP tendrá los salarios

  • Una fila es una colección de información de columna correspondiente a un solo registro.

A continuación, hablaremos en detalle sobre la instrucción de creación de tabla de Oracle

Cómo crear una tabla en Oracle

Para crear una tabla en la base de datos, debemos tener la siguiente información

  • El nombre de la tabla
  • Tipo de tabla
  • Restricciones
  • parámetro de almacenamiento de tabla

Veamos cada uno de estos en detalle

Convenciones de nomenclatura de tablas para la creación de tablas de Oracle

  • El nombre que elija para una tabla debe seguir estas reglas estándar:
  • El nombre debe comenzar con una letra A-Z o a-z
  • Puede contener números y guiones bajos
  • Puede estar en MAYÚSCULAS o en minúsculas
  • Puede tener hasta 30 caracteres de longitud. Con 12.2, se ha ampliado a 128 caracteres
  • No se puede usar el mismo nombre de otro objeto existente en su esquema
  • No debe ser un servidor de Oracle y una palabra reservada de SQL
  • Nombre de columna, tipos de datos de columna y tamaños de columna.

Convenciones de nomenclatura de columnas:

  • El nombre que elija para una columna debe seguir estas reglas estándar:
  • El nombre debe comenzar con una letra A-Z o a-z
  • Puede contener números y guiones bajos
  • Puede estar en MAYÚSCULAS o en minúsculas
  • Puede tener hasta 30 caracteres de longitud. Con 12.2, se ha ampliado a 128 caracteres
  • No se puede usar el mismo nombre de otro objeto existente en su esquema
  • No debe ser un servidor de Oracle y una palabra reservada de SQL

Tipo de mesa

Tabla ordinaria (organizada en montones)

-Este es el tipo de tabla básica de uso general.

-Sus datos se almacenan como una colección desordenada (montón)

Tabla agrupada

-Una tabla agrupada es una tabla que forma parte de un clúster.

-Un clúster es un grupo de tablas que comparten los mismos bloques de datos porque comparten columnas comunes y, a menudo, se usan juntas.

Tabla organizada por índice

-A diferencia de una tabla ordinaria (organizada en montones), los datos de una tabla organizada por índices se almacenan en una estructura de índice de árbol B en una forma ordenada de clave principal.

-Además de almacenar los valores de columna de clave principal de una fila de tabla organizada por índice, cada entrada de índice en el árbol B también almacena los valores de columna que no son clave.

Tabla dividida

–Las tablas particionadas de Oracle permiten que sus datos se dividan en partes más pequeñas y manejables llamadas particiones o incluso subparticiones.

  • Cada partición se puede administrar individualmente y puede operar independientemente de las otras particiones, lo que proporciona una estructura que se puede ajustar mejor para la disponibilidad y el rendimiento.

Mesa Externa

Las tablas externas de Oracle permiten a Oracle consultar datos que se almacenan fuera de la base de datos en archivos sin formato.

Tabla temporal global

Los datos en una tabla temporal global son privados, de modo que solo esa sesión puede acceder a los datos insertados por una sesión. Las filas específicas de la sesión en una tabla temporal global se pueden conservar para toda la sesión o solo para la transacción actual

Restricciones y reglas

Puede especificar reglas para cada columna de una tabla. Estas reglas se denominan restricciones de integridad. Un ejemplo de ello es una restricción de integridad no nula. Esta restricción obliga a la columna a contener un valor en cada fila. Estas reglas se imponen para cada columna o conjunto de columnas. Cada vez que la tabla participa en la acción de datos, estas reglas se validan y generan excepciones en caso de infracción.

Una restricción puede ser una de las siguientes:

  • una restricción a nivel de columna

Las restricciones a nivel de columna se refieren a una sola columna en la tabla y no especifican un nombre de columna (excepto las restricciones de verificación). Hacen referencia a la columna que siguen.

  • una restricción a nivel de tabla

Las restricciones a nivel de tabla se refieren a una o más columnas de la tabla. Las restricciones a nivel de tabla especifican los nombres de las columnas a las que se aplican. Las restricciones CHECK a nivel de tabla pueden referirse a 0 o más columnas en la tabla.

Los tipos de restricciones disponibles son NOT NULL, clave principal, única, verificación y clave externa.

Clave principal

Una clave principal en Oracle es una columna en una tabla cuyos valores identifican de forma única la fila en la tabla. Un valor de clave principal:

a) Debe identificar de forma única la fila;

b) no puede tener valores NULOS ;

Oracle crea internamente un índice de Oracle único para evitar la duplicación en los valores de la columna. Se puede definir a nivel de columna o de tabla

Una clave principal también puede ser varias columnas

Clave única

Clave única en Oracle significa unicidad para la columna. El servidor de Oracle no permitirá valores duplicados en la columna que tenga restricciones únicas. Oracle crea internamente un índice único para evitar la duplicación en los valores de la columna. Pero permite que algunos valores sean nulos. Se puede definir a nivel de columna o de tabla

Clave foránea

-Una clave foránea en Oracle es una restricción referencial entre dos tablas.

-Una restricción de clave externa valida los valores de INSERT o UPDATE contra los valores de otra columna, ya sea en una tabla diferente o en otra columna de la misma

-Una clave foránea siempre define una relación padre/hijo. El "principal" es la columna a la que se hace referencia en la clave externa y el "secundario" es la columna o columnas que contienen la restricción de clave externa.

-En general, sin embargo, una clave externa es un campo (o campos) que apunta a la clave principal de otra tabla.
-Se puede definir a nivel de columna o de tabla

Comprobar restricción

Una restricción de verificación de Oracle requiere un valor en la base de datos para cumplir con una condición específica. La restricción de verificación permite imponer una regla condicional en una columna, que debe validarse antes de que se inserten datos en la columna. La condición no debe contener una subconsulta o pseudocolumna CURRVAL NEXTVAL, LEVEL, ROWNUM o SYSDATE.

Oracle permite que una sola columna tenga más de una restricción CHECK. De hecho, no existe un límite práctico para el número de restricciones CHECK que se pueden definir para una columna.

Se puede definir a nivel de columna o de tabla

No nulo

Significa que una fila de datos debe tener un valor para la columna especificada como NOT NULL. El servidor de Oracle no permitirá que se almacenen filas que violen esta restricción. Solo se puede definir a nivel de columna y no a nivel de tabla.

Parámetro de almacenamiento de tabla

Las tablas se almacenan en Oracle Tablespace en la base de datos. Si no se especifica Tablespace, la tabla va al Tablespace predeterminado del usuario.

Así que en pocas palabras

1) Debe elegir el nombre de columna y el nombre de tabla apropiados según el estándar anterior. Se recomienda dar el nombre de la columna y el nombre de la tabla de modo que pueda identificar el propósito comprobando los nombres

2) En segundo lugar, debe elegir el tipo de datos de Oracle adecuado para la tabla.
Si se trata de una cadena de caracteres, deberíamos elegir VARCHAR2 (10). Esta es una cadena variable, debemos elegir el valor apropiadamente. Esto significa que puede almacenar caracteres hasta 10 bytes. El espacio utilizado dependerá de los valores de la columna y no habrá desperdicio de espacio.

Destacaría aquí una cosa:cuando damos VARCHAR2(10) aquí 10 es el número de bytes, no el carácter.
El número de caracteres y bytes es similar cuando se trata de caracteres ASCII, pero la ecuación cambia. comience a usar un carácter que no sea ASCII

En este momento, VARCHAR2 admite 4000 bytes, si su columna es más grande que eso, puede usar el tipo de datos LOB, que puede almacenar texto para GIGA bytes.

Si es un número, usamos el tipo de dato Número. Nuevamente podemos elegir el valor apropiadamente. Número de ejemplo (6,2) Esto puede contener un máximo de 999999.99

Si desea almacenar la fecha, Oracle ha proporcionado el tipo de datos de fecha para el almacenamiento.

3) Identifique la restricción en la tabla. Decida cuál será la clave principal y qué columnas no serán nulas.

Una vez que tengamos toda la información requerida, podemos avanzar con la creación de la tabla

Sintaxis de creación de tablas de Oracle

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

SINTAXIS  para la clave principal de Oracle Create Table . Se puede definir tanto a nivel de columna como a nivel de tabla

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>

Ejemplo de llave principal de Oracle create Table 

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 crea un índice para hacer cumplir las restricciones de la clave principal

Relacionado:preguntas de la entrevista de Oracle

La explicación de la tabla TEST1

1 La primera columna se llama  inv_id que se crea como un tipo de datos char (máximo 7 dígitos de longitud) y no puede contener valores nulos
2 La segunda columna se llama  id_elemento que se crea como un tipo de datos char (máximo 7 dígitos de longitud) y no puede contener valores nulos
3 La tercera columna se llama creado que es una fecha tipo de datos y también puede contener valores nulos.
4 La cuarta columna se llama quién que es un tipo de datos char y también puede contener valores nulos.
5 La restricción de clave principal a nivel de tabla TEST1_PK se define en la clave compuesta (INV_ID, ITEM_ID)

SINTAXIS  para la instrucción Oracle create Table Clave FOREIGN. Se puede definir tanto a nivel de columna como a nivel de tabla

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) );

Explicación de la tabla EMP

1 La primera columna se llama EMP_NO que se crea como un número y no puede contener valores nulos
2 La segunda columna se llama emp_name que se crea como varchar2(50) y no puede contener valores nulos
3 La tercera columna se llama dept_id que es un número.
4 La cuarta columna se llama sal que es un tipo de datos numérico y también puede contener valores nulos.
5 La restricción de clave principal de nivel de tabla EMP_PK se define en la clave (EMP_NO)
6 Restricciones de clave externa a nivel de tabla dept_fk que hace referencia a la tabla dept dept_id

Privilegio requerido para crear una tabla de Oracle

-Debe tener el privilegio del sistema de creación de tablas para poder crear una nueva tabla en su esquema,

  • Debe tener el privilegio del sistema crear cualquier tabla para crear una tabla en el esquema de otro usuario; además, el propietario de la tabla debe tener una cuota para el espacio de tablas que contiene la tabla, o el privilegio del sistema UNLIMITED TABLESPACE 

Relacionado:Cómo escribir consultas sql

Otras características asociadas con la tabla de la base de datos de Oracle

Caché/sin caché

Utilice las cláusulas CACHE para indicar cómo Oracle Database debe almacenar bloques en la memoria caché del búfer. Si no especifica nada en el comando de creación de tabla, por defecto no tiene caché

DEFECTO

El valor insertado en la columna si la inserción o actualización dejaría el valor de la columna NULL.

| NULO>

PARALELO

Especifique PARALLEL si desea que Oracle seleccione un grado de paralelismo igual al número de CPU disponibles en todas las instancias participantes multiplicado por el valor del parámetro de inicialización PARALLEL_THREADS_PER_CPU.

Comprimir

Esto es utilizado por el oráculo para almacenar la tabla en formato comprimido. Está disponible a partir de 11g

Comentar una tabla o columna

Puedes comentar la tabla usando el comando

COMMENT ON TABLE <table_name> IS '<comment>';

Crear tabla de Oracle con valor predeterminado

A veces, desea asignar un valor predeterminado a la columna si no se especifica en la declaración de inserción, luego puede crear la tabla con la siguiente sintaxis. DEFAULT es la palabra clave utilizada

CREATE TABLE EXP
(
NAME VARCHAR2(20),
SAL number(8,2) DEFAULT 800,
hire_date DATE DEFAULT SYSDATE ,
birthdate DATE DEFAULT SYSDATE -10
)

El valor predeterminado de la tabla de creación de Oracle cambia en 12c

Columnas IDENTIDAD
En Oracle Database 12c, podemos definir columnas de tabla con la palabra clave SQL IDENTITY, que es una palabra clave SQL del American National Standards Institute (ANSI). Que se incrementan automáticamente en el momento de la inserción (como en 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 DEFAULT solo de metadatos

Antes de Oracle 11g, agregar una nueva columna a una tabla existente requería que todas las filas de esa tabla se modificaran para agregar la nueva columna. Por lo tanto, si la tabla es muy grande, modificar la columna para agregar la tabla tomó un tiempo considerable y el tiempo de bloqueo también fue más

Con Oracle, 11g introdujo el concepto de valores predeterminados solo de metadatos. Agregar una columna NOT NULL con una cláusula DEFAULT a una tabla existente implicaba solo un cambio de metadatos, en lugar de un cambio en todas las filas de la tabla. El optimizador reescribió las consultas de la nueva columna para asegurarse de que el resultado fuera coherente con la definición predeterminada.

Lea más sobre eso en el siguiente artículo

Cómo alterar la tabla agregar columna oráculo

Oracle 12c lleva esto un paso más allá, permitiendo valores predeterminados solo de metadatos de columnas obligatorias y opcionales. Como resultado, agregar una nueva columna con una cláusula DEFAULT a una tabla existente se manejará como un cambio de metadatos únicamente, independientemente de si esa columna se define como NOT NULL o no.

Este es un gran beneficio para todos.

Tablas y vistas del diccionario de datos

Toda la información de tablas y columnas se almacena en las tablas SYS.TAB$ y SYS.COL$. Oracle ha proporcionado vistas de diccionario de datos para obtener información sobre tablas y columnas

Hay tres categorías de vistas

Cómo enumerar todas las tablas en 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>

Cómo determinar el tamaño de la tabla

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>’;

Tablas con número de filas y comentarios

La siguiente consulta se puede utilizar para encontrar el recuento de filas y comentarios en el 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;

Preguntas frecuentes sobre la creación de tablas de Oracle

1. ¿Oracle tiene el comando crear o reemplazar tabla de Oracle?

Oracle no tiene un comando de Oracle para crear o reemplazar una tabla. Crear o reemplazar solo es válido para vistas, PLSQL:solo procedimientos. Debe realizar la alteración usando el comando ALTER Table solo
O puede soltar explícitamente la tabla y crearla de nuevo

2. ¿Tenemos alguna cláusula como crear tabla de Oracle si no existe?

no tenemos ningún directo, pero puede usar PLSQL para emular eso
SET SERVEROUTPUT ON
DECLARE c_emp int:=0;
BEGIN SELECT count(*) into c_emp FROM dba_tables where table_name ='EMP';
if c_emp<=0
EXECUTE IMMEDIATE 'create table EMP (NÚMERO DE ID(3), NOMBRE VARCHAR2( 30) NO NULO,NÚMERO SAL*,2))';
end if;
END;
/

Esquema de muestra para practicar

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 le guste este artículo sobre la instrucción, el comando, la sintaxis y los consejos de Oracle Create Table.

Artículos relacionados
alterar tabla agregar oráculo de columna:información útil sobre cómo alterar tabla agregar oráculo de columna. También se proporcionan detalles sobre la función de adición rápida de columnas introducida en Oracle 11g
DROP TABLE ORACLE:Obtenga información sobre la eliminación de tablas en Oracle, eliminación de tablas si existe en Oracle, eliminación de varias tablas en un solo comando, restricciones de cascada de eliminación de tablas
alterar movimiento de tabla:consulte esta publicación para conocer el método paso a paso sobre cómo reconstruir la tabla en Oracle usando alterar el movimiento de la tabla, cómo reconstruir la tabla con lobs, columna larga
Truncate TABLE Oracle:Truncate TABLE en Oracle es más rápido que Eliminar de la tabla en Oracle. Es una declaración DDL y no activa los activadores de eliminación parámetros de almacenamiento
lista de todas las tablas de Oracle:podemos obtener la lista de todas las tablas en Oracle consultando all_tables o user_tables o dba_tables. podemos seleccionar la columna y la cláusula where según la necesidad
Registro suplementario en Oracle
funciones de fecha Oracle SQL
https://docs.oracle.com/cd/B19306_01/server.102/ b14231/tables.htm
Creación de una tabla temporal global en Oracle