sql oracle oracle11g sequence

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