Social
Latest news Aggiorna

loading
Latest comments Aggiorna

loading
Creare una tabella con chiave primaria, foreign key e autoincrement in Oracle
Scritto da Luca Bianconi
Friday 15 April 2011

Vediamo un pò di codice utile per quella meraviglia di Oracle.
La prima cosa inquietante che si incontra volendo creare una tabella utilizzando il nostro favoloso DBMS di fiducia, ossia Oracle, è la mancanza di AUTO_INCREMENT, utile ad esempio per creare automaticamente l'intero da inserire progressivamente come valore di una chiave primaria.
Oracle ha bisogno di una SEQUENCE con incremento, ad esempio, di uno eppoi di un TRIGGER che calcoli e incrementi di conseguenza ad ogni inserimento il valore dell'intero.

Vediamo il codice (esempio per la creazione di due tabelle in relazione con indici autoincrementanti):

-- TABLE PERSONS

CREATE TABLE Persons
(
  P_Id int PRIMARY KEY  not null,
  LastName varchar(255),
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255)
);

CREATE SEQUENCE persons_sequence
START WITH 1
INCREMENT BY 1;

CREATE OR REPLACE TRIGGER persons_trigger
BEFORE INSERT
ON Persons
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT persons_sequence.nextval INTO :NEW.P_Id FROM dual;
END;


-- TABLE ORDERS, FK INTO PERSONS

CREATE TABLE Orders
(
  o_id int PRIMARY KEY not null,
  pers_id int  not null,
  CONSTRAINT fk_orders
  FOREIGN KEY (pers_id)
  REFERENCES persons(p_id)
);

CREATE SEQUENCE orders_sequence
START WITH 1
INCREMENT BY 1;

CREATE OR REPLACE TRIGGER orders_trigger
BEFORE INSERT
ON orders
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT orders_sequence.nextval INTO :NEW.o_id FROM dual;
END;

That's all folks!

Fonti:

comments powered by Disqus