将自动生成的一列编号插入到oracle sql中的另一列中

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

我有一个包含两列的数据库表 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
1个回答
0
投票

一个选项是创建一个标识列(用于 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>
© www.soinside.com 2019 - 2024. All rights reserved.