将自动生成的一列编号插入另一列

问题描述 投票:0回答:3

我有一个包含两列的数据库表 customer_id 编号和名字 VARCHAR2
对于 customer_id,数字会自动递增。 我需要带有特定格式的 customer_id 值的first_name。

请参阅以下示例:
image

如果 customer_id 自动递增到值 1,则first_name 应为 NAME-1 如果 customer_id 自动递增到值 2,则first_name 应为“NAME-2”

到目前为止我得到的唯一可行的选择是执行 3 个 SQL 语句。
一个用于插入,下一个用于读取递增的值并对first_name列执行更新。

如果有人能建议一种更好的方法来以尽可能少的 SQL 查询来处理此问题,我非常感谢您的帮助和指导。

sql oracle oracle-sqldeveloper
3个回答
1
投票

一个选项是创建一个标识列(用于 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>

0
投票

因为“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
)

0
投票
select Customer_id
    , concat(first_name, CONCAT('-', customer_id)) as first_name
from Customers;
© www.soinside.com 2019 - 2024. All rights reserved.