Generado personalizados columna de Identidad en Oracle

0

Pregunta


He leído la documentación de las columnas de Identidad en Oracle como se detalla aquí: https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/creating-tables-identity-column.html

La documentación menciona que los valores que se introducen por el generador de secuencias en la columna de identidad son enteros. Esto se puede encontrar aquí https://docs.oracle.com/en/database/other-databases/nosql-database/19.1/java-driver-table/sequence-generator-attributes.html

Ahora, mi pregunta es esta: ¿hay una manera de tener valores generados para la columna de identidad? Otro de los valores enteros. Decir, una cadena como 'ID001', 'ID002", etc?
Muchas gracias de antemano

oracle sql
2021-11-24 06:26:45
2

Mejor respuesta

2

Primero pensar ¿por qué debe usted utilizar cadenas como clave principal.

¿Ves alguna ventaja? (Distintos de los que utilizan más almacenamiento?)

En segundo lugar , con su clave, tales como ID001 considere lo que debería suceder si usted tiene más de 1000 filas...

Una explicación es que usted está buscando algunos de usuario legible de la identificación de la fila. Esto puede ser proporcionado utilizando el estándar de IDENTIDAD más un adicional de columna virtual

Ejemplo

create table MY_TABLE (
ID number(19,0) generated as identity, 
ID_DESC varchar2(255 char) generated always as ('ID'||ID) virtual,
col int,
primary key (ID))
;

insert into my_table(col)
select rownum from dual connect by level <= 3;


select id, id_desc from  my_table order by id;

        ID ID_DESC
---------- ---------        
         1 ID1                                                                                                                                                                                                                                                            
         2 ID2                                                                                                                                                                                                                                                            
         3 ID3 
2021-11-24 10:43:34

Gracias MarmiteBomber. Esto le da otra perspectiva. La respuesta dada por @Littlefoot explica lo que yo quería. Voy a cambiar la etiqueta. Lo siento por la confusión.
TheEqualizer
0

Es posible, pero vas a tener que hacer algo al respecto (es decir, escribir algo de código - un trigger). He aquí un ejemplo.

Tabla de ejemplo; su columna de ID debe ser auto-generado:

SQL> create table test (id varchar2(10), name varchar2(10));

Table created.

Una secuencia, el cual será utilizado en un desencadenador:

SQL> create sequence seq_test;

Sequence created.

Trigger es bastante simple; concatena ID con un número de secuencia, de izquierda se rellenan con ceros hasta 3 caracteres de longitud (como tu ejemplo, dice así):

SQL> create or replace trigger trg_bi_test
  2    before insert on test
  3    for each row
  4  begin
  5    :new.id := 'ID' || lpad(seq_test.nextval, 3, '0');
  6  end;
  7  /

Trigger created.

Pruebas:

SQL> insert into test (name) values ('Little');

1 row created.

SQL> insert into test (name)
  2    select 'Foot'      from dual union all
  3    select 'Equalizer' from dual;

2 rows created.

SQL> select * from test order by id;

ID         NAME
---------- ----------
ID001      Little
ID002      Foot
ID003      Equalizer

SQL>

P. S. Vínculo que has publicado no está relacionado con "tradicional" de la base de datos de Oracle; compruebe por ejemplo, CREAR una TABLA con la documentación, que contiene la información acerca de las columnas de identidad. Su enlace es relativa a la base de datos NoSQL.

2021-11-24 08:02:17

Esto ayuda a @Littlefoot. Gracias. Lo siento, yo erróneamente asignado la etiqueta :)
TheEqualizer

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................