У меня есть таблица базы данных с двумя столбцами
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-запросов.
Один из вариантов — создать столбец идентификаторов (для столбца идентификаторов) и триггер базы данных, который устанавливает для имени желаемое значение.
Стол:
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
с более чем двумя аргументами, вместо этого используйте ||
.
select Customer_id
, concat(first_name, CONCAT('-', customer_id)) as first_name
from Customers;
Какую проблему вы решаете, объединяя имя и идентификатор? Почему вы хотите это сделать?