martes, 13 de septiembre de 2011

Oracle - Creacion de tablas y secuencias

A continuación vamos a ver algunos ejemplos básicos de creación de tablas en Oracle como así también la generación de PK, FK y secuencias:

Requisitos previos

Tener instalado y levantado una base de datos Oracle.

Usuario / password de base de datos

  • prueba prueba

Comandos para crear el usuario y password en la BD, necesarios para este tutorial:

  • drop user prueba cascade;
  • create user prueba identified by prueba ;
  • grant DBA to prueba;


Ejemplos

A continuación crearemos un par de tablas con PKs, PK compuesta,  FKs y un sequence.


create table USUARIOS(
  nombre varchar2(30),
  clave varchar2(10)
);


select * from usuarios;


drop table usuarios;


select * from all_tables


CREATE TABLE supplier (      
    supplier_id     numeric(10)     not null,
    supplier_name   varchar2(50)    not null,
    contact_name    varchar2(50),
    CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);


CREATE TABLE products (      
    product_id      numeric(10)     not null,
    supplier_id     numeric(10)     not null,
    CONSTRAINT fk_supplier  FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id)
);


create table employee_history( 
    employee_id       number(6) not null,
    salary            number(8,2),
    hire_date         date default sysdate,
    termination_date  date,
    termination_desc varchar2(4000),
    constraint emphistory_pk
    primary key (employee_id, hire_date)
);


CREATE SEQUENCE test_sequence
    START WITH 1
    INCREMENT BY 1;


INSERT INTO SUPPLIER(SUPPLIER_ID, SUPPLIER_NAME, CONTACT_NAME) 
    VALUES(test_sequence.nextval, 'nombre2', 'contacto2');


select * from SUPPLIER



 SUPPLIER_ID     SUPPLIER_NAME     CONTACT_NAME    
 --------------  ----------------  --------------- 
 1               nombre1           contacto1       
 2               nombre2           contacto2       





O bien, para no tener que usar el NEXTVAL del sequence cada vez que insertamos datos, podemos armar un trigger como muestra el siguiente ejemplo:
Trigger definition:
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;

END;

No hay comentarios:

Publicar un comentario