我有一个包含两列的数据库表
customer_id 编号和名字 VARCHAR2
对于 customer_id,数字会自动递增。
我需要带有特定格式的 customer_id 值的first_name。
请参阅以下示例:
如果 customer_id 自动递增到值 1,则first_name 应为 NAME-1 如果 customer_id 自动递增到值 2,则first_name 应为“NAME-2”
到目前为止我得到的唯一可行的选择是执行 3 个 SQL 语句。
一个用于插入,下一个用于读取递增的值并对first_name列执行更新。
如果有人能建议一种更好的方法来以尽可能少的 SQL 查询来处理此问题,我非常感谢您的帮助和指导。
一个选项是创建一个标识列(用于 ID 列)和一个数据库触发器,将名字设置为所需的值。
表:
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
*,
concat(name, '-', id) as name_id
from mytable
或创建视图:
create view mytable_x as (
select
id,
name as raw_name,
concat(name, '-', id) as name,
-- other columns
from mytable
)
select Customer_id
, concat(first_name, CONCAT('-', customer_id)) as first_name
from Customers;