0. Introducción
En Oracle tenemos estos conceptos:
SCHEMA: Un conjunto de tablas y otros elementos (funciones, procedimientos almacenados, tipos indices, vistas...)que tienen ciertas caracteristicas comunes. Por ejemplo podemos tener un esquema pora territorio, para personas, para contabilidad etc.
TABLESPACE: Sistema físico donde almacenar las tablas, el concepto es similar al de un directorio que puede guardar ficheros. Fijare que las tablas de un mismos SCHEMA pueden estar en distintos TABLESPACES.
Para crear una tabla, DBeaver nos ofrece la opción de seleccionar un SCHEMA y un TABLESPACE. Por omisión si no se los indicamos los crea en un esquema
IMPORTANTE: Tener cuidado con el contenedor (Base de datos) que estamos usando, como ya se vió:
Para listar los contenedores (siempre que no hayamos entrado en algún contenedor específico) hacemos
SQL> select con_id, name from v$containers;
Y para utilizar un contenedor debemos hacer
SQL> ALTER SESSION SET CONTAINER = XEPDB1;
1. Creación de un SCHEMA.
Hacemos click derecho sobre Schemas y seleccionamos Create new Schema. Le damos nombre y contraseña
También se hubiera podido hacer ejecutando un script dentro de DBeaver (este escript dentro de DBeaver, se ejecuta en el contenedor XEPDB1).
CREATE USER SCHM01_XIMO IDENTIFIED BY myPassword;
OJO: Oracle considera un esquema como un usuario.
Según el tutorial de Oracle hay que darle permisos y todo como un usuario.
GRANT CONNECT, RESOURCE, DBA TO SCHM01_XIMO;
2. Creación de un TABLESPACE.
Parece ser que en DBeaver not enomos la opción de crear TABLESPACES. Para ello hacemos click derecho sobre la conexion (en mi caso XEPDB1), Seleccionamos SQL Editor y New SQL Script
Y ejecutamos el script
CREATE TABLESPACE TABSPC01_XIMO DATAFILE '/opt/oracle/oradata/XE/XEPDB1/TABSPC01_XIMO.dbf' size 50M;
y refrescando DBeaver vemos dicho TABLESPACE
3. Creación de una TABLA.
Vamos Schemas - SCHM01_XIMO - Tables y con click derecho seleccionamos Create New Table
y nos pide el nombre de la tabla ,TABLESACE y mas información.CREATE TABLE SCHM01_XIMO.REGIONS ( REGION_ID NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 5 PRIMARY KEY, REGION_NAME VARCHAR2(50) NOT NULL --, ) TABLESPACE TABSPC01_XIMO;
4. Modificar script de creación de tablas
- "TABLE " por "TABLE SCHM01_XIMO." para añadir el SCHEMA y
- ");" por ") TABLESPACE TABSPC01_XIMO;"
-------------------------------------------------------------------------------------- -- Name : OT (Oracle Tutorial) Sample Database -- Link : http://www.oracletutorial.com/oracle-sample-database/ -- Version : 1.0 -- Last Updated: July-28-2017 -- Copyright : Copyright © 2017 by www.oracletutorial.com. All Rights Reserved. -- Notice : Use this sample database for the educational purpose only. -- Credit the site oracletutorial.com explitly in your materials that -- use this sample database. -------------------------------------------------------------------------------------- --------------------------------------------------------------------------- -- execute the following statements to create tables --------------------------------------------------------------------------- -- regions CREATE TABLE SCHM01_XIMO.regions ( region_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 5 PRIMARY KEY, region_name VARCHAR2( 50 ) NOT NULL ) TABLESPACE TABSPC01_XIMO; -- countries table CREATE TABLE SCHM01_XIMO.countries ( country_id CHAR( 2 ) PRIMARY KEY , country_name VARCHAR2( 40 ) NOT NULL, region_id NUMBER , -- fk CONSTRAINT fk_countries_regions FOREIGN KEY( region_id ) REFERENCES SCHM01_XIMO.regions( region_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO; -- location CREATE TABLE SCHM01_XIMO.locations ( location_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 24 PRIMARY KEY , address VARCHAR2( 255 ) NOT NULL, postal_code VARCHAR2( 20 ) , city VARCHAR2( 50 ) , state VARCHAR2( 50 ) , country_id CHAR( 2 ) , -- fk CONSTRAINT fk_locations_countries FOREIGN KEY( country_id ) REFERENCES SCHM01_XIMO.countries( country_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO; -- warehouses CREATE TABLE SCHM01_XIMO.warehouses ( warehouse_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 10 PRIMARY KEY, warehouse_name VARCHAR( 255 ) , location_id NUMBER( 12, 0 ), -- fk CONSTRAINT fk_warehouses_locations FOREIGN KEY( location_id ) REFERENCES SCHM01_XIMO.locations( location_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO; -- employees CREATE TABLE SCHM01_XIMO.employees ( employee_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 108 PRIMARY KEY, first_name VARCHAR( 255 ) NOT NULL, last_name VARCHAR( 255 ) NOT NULL, email VARCHAR( 255 ) NOT NULL, phone VARCHAR( 50 ) NOT NULL , hire_date DATE NOT NULL , manager_id NUMBER( 12, 0 ) , -- fk job_title VARCHAR( 255 ) NOT NULL, CONSTRAINT fk_employees_manager FOREIGN KEY( manager_id ) REFERENCES SCHM01_XIMO.employees( employee_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO; -- product category CREATE TABLE SCHM01_XIMO.product_categories ( category_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 6 PRIMARY KEY, category_name VARCHAR2( 255 ) NOT NULL ) TABLESPACE TABSPC01_XIMO; -- products table CREATE TABLE SCHM01_XIMO.products ( product_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 289 PRIMARY KEY, product_name VARCHAR2( 255 ) NOT NULL, description VARCHAR2( 2000 ) , standard_cost NUMBER( 9, 2 ) , list_price NUMBER( 9, 2 ) , category_id NUMBER NOT NULL , CONSTRAINT fk_products_categories FOREIGN KEY( category_id ) REFERENCES SCHM01_XIMO.product_categories( category_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO; -- customers CREATE TABLE SCHM01_XIMO.customers ( customer_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 320 PRIMARY KEY, name VARCHAR2( 255 ) NOT NULL, address VARCHAR2( 255 ) , website VARCHAR2( 255 ) , credit_limit NUMBER( 8, 2 ) ) TABLESPACE TABSPC01_XIMO; -- contacts CREATE TABLE SCHM01_XIMO.contacts ( contact_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 320 PRIMARY KEY, first_name VARCHAR2( 255 ) NOT NULL, last_name VARCHAR2( 255 ) NOT NULL, email VARCHAR2( 255 ) NOT NULL, phone VARCHAR2( 20 ) , customer_id NUMBER , CONSTRAINT fk_contacts_customers FOREIGN KEY( customer_id ) REFERENCES SCHM01_XIMO.customers( customer_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO; -- orders table CREATE TABLE SCHM01_XIMO.orders ( order_id NUMBER GENERATED BY DEFAULT AS IDENTITY START WITH 106 PRIMARY KEY, customer_id NUMBER( 6, 0 ) NOT NULL, -- fk status VARCHAR( 20 ) NOT NULL , salesman_id NUMBER( 6, 0 ) , -- fk order_date DATE NOT NULL , CONSTRAINT fk_orders_customers FOREIGN KEY( customer_id ) REFERENCES SCHM01_XIMO.customers( customer_id ) ON DELETE CASCADE, CONSTRAINT fk_orders_employees FOREIGN KEY( salesman_id ) REFERENCES SCHM01_XIMO.employees( employee_id ) ON DELETE SET NULL ) TABLESPACE TABSPC01_XIMO; -- order items CREATE TABLE SCHM01_XIMO.order_items ( order_id NUMBER( 12, 0 ) , -- fk item_id NUMBER( 12, 0 ) , product_id NUMBER( 12, 0 ) NOT NULL , -- fk quantity NUMBER( 8, 2 ) NOT NULL , unit_price NUMBER( 8, 2 ) NOT NULL , CONSTRAINT pk_order_items PRIMARY KEY( order_id, item_id ), CONSTRAINT fk_order_items_products FOREIGN KEY( product_id ) REFERENCES SCHM01_XIMO.products( product_id ) ON DELETE CASCADE, CONSTRAINT fk_order_items_orders FOREIGN KEY( order_id ) REFERENCES SCHM01_XIMO.orders( order_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO; -- inventories CREATE TABLE SCHM01_XIMO.inventories ( product_id NUMBER( 12, 0 ) , -- fk warehouse_id NUMBER( 12, 0 ) , -- fk quantity NUMBER( 8, 0 ) NOT NULL, CONSTRAINT pk_inventories PRIMARY KEY( product_id, warehouse_id ), CONSTRAINT fk_inventories_products FOREIGN KEY( product_id ) REFERENCES SCHM01_XIMO.products( product_id ) ON DELETE CASCADE, CONSTRAINT fk_inventories_warehouses FOREIGN KEY( warehouse_id ) REFERENCES SCHM01_XIMO.warehouses( warehouse_id ) ON DELETE CASCADE ) TABLESPACE TABSPC01_XIMO;
5. Modificar el script de carga de datos
- "TABLE " por "TABLE SCHM01_XIMO." para añadir el SCHEMA,
- "Insert into " por "Insert into SCHM01_XIMO."
- "REM INSERTING" por "--REM INSERTING." (Comentando)
- "SET DEFINE" por "--SET DEFINE" (Comentando)
SELECT TO_CHAR(TO_DATE(1, 'MM'), 'MON'), TO_CHAR(TO_DATE(2, 'MM'), 'MON'), TO_CHAR(TO_DATE(3, 'MM'), 'MON'), TO_CHAR(TO_DATE(4, 'MM'), 'MON'), TO_CHAR(TO_DATE(5, 'MM'), 'MON'), TO_CHAR(TO_DATE(6, 'MM'), 'MON'), TO_CHAR(TO_DATE(7, 'MM'), 'MON'), TO_CHAR(TO_DATE(8, 'MM'), 'MON'), TO_CHAR(TO_DATE(9, 'MM'), 'MON'), TO_CHAR(TO_DATE(10, 'MM'), 'MON'), TO_CHAR(TO_DATE(11, 'MM'), 'MON'), TO_CHAR(TO_DATE(12, 'MM'), 'MON') FROM DUAL;
Ahora debemos cambiar los meses en ingles (JAN FEB MAR APR JUN JUL AUG OCT NOV DEC) por los anteriores y ejecutar, y en teopría se deberían cargar
Analogamente se ejecutarían las sentenciasdel script de carga de datos.
No hay comentarios :
Publicar un comentario