在一个表中有几列,在3列中,我想合并这3列中的值,并在合并这3个值后生成主键。 数据类型长度为4 的 Col1 ,而 col2 & col3 数据类型长度为5 &分别 3 。在 col2 & col3 如果任何值小于最大长度,则使用 LPAD 0 ,然后合并到主键后。
前 - 如果 col1 = 1234,col2 = 142,col3 = 32 则合并后它应该像“123400142032”一样主键
答案 0 :(得分:0)
你可能需要这样的东西。
CREATE TABLE yourtable
(
col1 NUMBER,
col2 NUMBER,
col3 NUMBER
);
ALTER TABLE yourtable ADD (ID NUMBER GENERATED ALWAYS AS ( LPAD(col1,4,0)||LPAD(col2,5,0)||LPAD(col3,3,0) ) );
ALTER TABLE yourtable ADD CONSTRAINT t_test_pk PRIMARY KEY (ID) USING INDEX;
然后,您只能插入3列,并且列ID会自动填充123400142032
等数字。
INSERT INTO yourtable (col1, col2, col3)
VALUES (1234, 142, 32);
注意:创建表脚本仅供理解。您可能不需要它,因为您已经有一个现有的表。
虚拟列语法GENERATED .. AS
仅适用于11g及以上版本。对于较低版本,您可能需要先插入触发器和序列。
答案 1 :(得分:0)
with lp as
(select max(length(employee_id)) mp from employee),
llp as
(select max(length(first_name)) mf from employee)
select lp.*,lpad(employee_id,lp.mp,'0'),llp.*, lpad(first_name,llp.mf,'0'),
employee_id||lpad(employee_id,lp.mp,'0')||lpad(first_name,llp.mf,'0')from lp,llp,employee;
注意:此处employee_id和first_name是列,您可以将其视为column1和column2 ..