sql - Aumento automático en Oracle a la tabla ya creada
oracle11g sequence (1)
¿Cómo agregar incremento automático a la columna existente en Oracle? La columna ya se ha creado y es la clave principal de la tabla. Solo quiero alterar la tabla para que sea autoincremento. A continuación se muestran los detalles de la columna.
Column Name DATA_TYPE NULLABLE
SEQ_ID VARCHAR2(9 BYTE) No
El número de incremento automático debe comenzar desde 150111111 hasta valores como 150111112, 150111113, etc.
Gracias
En 11g y anteriores, cree una secuencia para incrementar la columna a través del disparador . Consulte Clave primaria de incremento automático en versiones anteriores a 12c (funcionalidad de identidad)
Por ejemplo,
MESA
SQL> CREATE TABLE t (
2 ID NUMBER(10) NOT NULL,
3 text VARCHAR2(50) NOT NULL);
Table created.
CLAVE PRIMARIA para ser poblada por la secuencia
SQL> ALTER TABLE t ADD (
2 CONSTRAINT id_pk PRIMARY KEY (ID));
Table altered.
SECUENCIA para soportar la clave primaria
SQL> CREATE SEQUENCE t_seq
2 START WITH 150111111
3 INCREMENT BY 1;
Sequence created.
DISPARADOR Si no desea tener la secuencia en el INSERTAR , puede automatizarla a través del DISPARADOR.
SQL> CREATE OR REPLACE TRIGGER t_trg
2 BEFORE INSERT ON t
3 FOR EACH ROW
4 WHEN (new.id IS NULL)
5 BEGIN
6 SELECT t_seq.NEXTVAL
7 INTO :new.id
8 FROM dual;
9 END;
10 /
Trigger created.
INSERTAR
SQL> INSERT INTO t(text) VALUES(''auto-increment test 1'');
1 row created.
SQL> INSERT INTO t(text) VALUES(''auto-increment test 2'');
1 row created.
Veamos si tenemos la columna de ID incrementada automáticamente con los valores deseados.
SQL> SELECT * FROM t;
ID TEXT
---------- --------------------------------------------------
150111111 auto-increment test 1
150111112 auto-increment test 2
SQL>
Entonces, la columna ID ahora comienza con el valor 150111111 y se incrementa en 1 con inserciones posteriores.
En 12c , use la columna Identidad . Vea la funcionalidad de autoincremento de columna IDENTITY en Oracle 12c
Por ejemplo,
TABLA con COLUMNA DE IDENTIDAD
SQL> CREATE TABLE t
2 (
3 ID NUMBER GENERATED ALWAYS AS IDENTITY
4 START WITH 150111111 INCREMENT BY 1,
5 text VARCHAR2(50)
6 );
Table created.
INSERTAR
SQL> INSERT INTO t
2 ( text
3 ) VALUES
4 ( ''This table has an identity column''
5 );
1 row created.
Veamos si tenemos la columna de ID incrementada automáticamente con los valores deseados.
SQL> COLUMN text format A40
SQL> SELECT * FROM t;
ID TEXT
---------- ----------------------------------------
150111111 This table has an identity column
Entonces, la columna ID ahora comienza con el valor 150111111 y se incrementa en 1 con inserciones posteriores.
Oracle crea una
sequence
para llenar la
identity column
.
Puede encontrarlo nombrado como
ISEQ$$
SQL> SELECT sequence_name,
2 min_value,
3 max_value,
4 increment_by
5 FROM user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY
------------------------------ ---------- ---------- ------------
ISEQ$$_94087 1 1.0000E+28 1
SQL>
Más información sobre las columnas de identidad, use la vista
ALL_TAB_IDENTITY_COLS
.
SQL> SELECT table_name,
2 column_name,
3 generation_type,
4 identity_options
5 FROM all_tab_identity_cols
6 WHERE owner = ''LALIT''
7 ORDER BY 1,
8 2;
TABLE_NAME COLUMN_NAME GENERATION IDENTITY_OPTIONS
-------------------- ----------- ---------- ----------------------------------------------
T ID ALWAYS START WITH: 150111111, INCREMENT BY: 1,
MAX_VALUE:9999999999999999999999999999,
MIN_VALUE: 1, CYCLE_FLAG: N, CACHE_SIZE: 20,
ORDER_FLAG: N