在一个表中,很少有列,在3列中,我希望合并这3列的值,并在合并这3列后生成主键。Col1具有数据类型长度4,col2和col3分别具有数据类型长度5 &E 1103E 211。在col2 & col3中,如果任何值小于最大长度,则使用LPAD和,然后合并到主键中。
如果"123400142032" col1= 1234,col2 = 142,col3 = 32,那么合并后应该像主键一样。
发布于 2017-12-08 05:44:23
你可能需要这样的东西。
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及以上。对于较低版本,您可能需要一个前置插入触发器和一个序列。
发布于 2017-12-08 07:06:12
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。
https://stackoverflow.com/questions/47707974
复制相似问题