Вставить автоматически сгенерированный номер одного столбца в другой столбец

У меня есть таблица базы данных с двумя столбцами customer_id Номер и имя VARCHAR2
Для customer_id число будет автоматически увеличено. Мне нужно имя first_name со значением customer_id в определенном формате.

См. пример ниже:
Вставить автоматически сгенерированный номер одного столбца в другой столбец

Если значение customer_id автоматически увеличивается до значения 1, значение first_name должно быть NAME-1. если customer_id автоматически увеличивается до значения 2, first_name должно иметь значение «NAME-2».

Единственный возможный вариант, который я получил до сих пор, — это выполнение трех операторов SQL.
Один для вставки, а следующий — для чтения увеличенного значения и выполнения обновления столбца first_name.

Я очень ценю помощь и рекомендации, если кто-нибудь может предложить лучший способ справиться с этим с помощью минимально возможных SQL-запросов.

Какую проблему вы решаете, объединяя имя и идентификатор? Почему вы хотите это сделать?

Bohemian 13.04.2024 01:40
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Один из вариантов — создать столбец идентификаторов (для столбца идентификаторов) и триггер базы данных, который устанавливает для имени желаемое значение.

Стол:

SQL> create table test (customer_id number generated always as identity,
  2                     first_name varchar2(10));

Table created.

Курок:

SQL> create or replace trigger trg_bi_test
  2    before insert on test
  3    for each row
  4  begin
  5    :new.first_name := :new.first_name ||'-'|| :new.customer_id;
  6  end;
  7  /

Trigger created.

Тестирование:

SQL> insert into test (first_name) values ('Scott');

1 row created.

SQL> insert into test (first_name) values ('Mike');

1 row created.

Результат:

SQL> select * from test;

CUSTOMER_ID FIRST_NAME
----------- ----------
          1 Scott-1
          2 Mike-2

SQL>

Поскольку строка «NAME-1» является производной, используйте выражение:

select
  *,
  name || '-' || id as name_id
from mytable

или создайте представление:

create view mytable_x as (
  select
    id,
    name as raw_name,
    name || '-' || id as name,
    -- other columns
  from mytable
)

В Oracle вы не можете использовать CONCAT с более чем двумя аргументами, вместо этого используйте ||.

Jonas Metzler 13.04.2024 08:52
select Customer_id
    , concat(first_name, CONCAT('-', customer_id)) as first_name
from Customers;

Другие вопросы по теме