I want different sequence in a single table for different values of a column (esercizio).
I do this but is not dynamic creation and use of sequence. How can abstract the problem?
CREATE TABLE Z_TEST
(
ID NUMBER,
ESERCIZIO NUMBER,
DESCRIZIONE VARCHAR2 (200 BYTE)
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
ALTER TABLE Z_TEST ADD ( CONSTRAINT Z_TEST_PK PRIMARY KEY (ID, ESERCIZIO));
CREATE SEQUENCE Z_TEST_SEQ_2010 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;
CREATE SEQUENCE Z_TEST_SEQ_2011 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;
CREATE SEQUENCE Z_TEST_SEQ_2012 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;
CREATE SEQUENCE Z_TEST_SEQ_2013 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;
CREATE SEQUENCE Z_TEST_SEQ_2014 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;
CREATE SEQUENCE Z_TEST_SEQ_2015 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;
CREATE OR REPLACE TRIGGER Z_TEST_TRG
BEFORE INSERT
ON Z_TEST REFERENCING new AS New old AS Old
FOR EACH ROW
DECLARE
err_code NUMBER;
err_msg VARCHAR2 (200);
BEGIN
if :new.esercizio = 2010 then select Z_TEST_SEQ_2010.nextval into :new.ID from dual; end if;
if :new.esercizio = 2011 then select Z_TEST_SEQ_2011.nextval into :new.ID from dual; end if;
if :new.esercizio = 2012 then select Z_TEST_SEQ_2012.nextval into :new.ID from dual; end if;
if :new.esercizio = 2013 then select Z_TEST_SEQ_2013.nextval into :new.ID from dual; end if;
if :new.esercizio = 2014 then select Z_TEST_SEQ_2014.nextval into :new.ID from dual; end if;
if :new.esercizio = 2015 then select Z_TEST_SEQ_2015.nextval into :new.ID from dual; end if;
EXCEPTION WHEN OTHERS THEN
err_msg := SUBSTR (SQLERRM, 1, 200);
err_code := SQLCODE;
DBMS_OUTPUT.put_line ('errore: ' || err_code || ' ' || err_msg);
END;
/
ESERCIZIO, IDrather thanID, ESERCIZIO. Then, if you don't care about gaps in your sequence, the same sequence can be used for all values ofID. Is there any reason why you can't have gaps? - Glenn