【问题标题】:Query for Merge values from 3 column and merge as Primary Key in Oracle从 3 列中查询合并值并合并为 Oracle 中的主键
【发布时间】:2018-05-22 07:44:35
【问题描述】:

在一个表中有几列,在 3 列中,我想合并这 3 列中的值,并在合并这 3 个值后生成为主键。 Col1 具有数据类型 length 4,而 col2 & col3 具有数据类型 length 5 & 3 分别。在 col2col3 中,如果任何值小于最大长度,则使用 LPAD0,然后在 Merge 之后进入主键。

Ex- 如果 col1 = 1234, col2 = 142, col3 = 32 那么在合并后它应该像 "123400142032" 作为 Primary Key >.

【问题讨论】:

    标签: sql oracle


    【解决方案1】:
    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..

    【讨论】:

      【解决方案2】:

      你可能需要这样的东西。

      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 及更高版本。对于较低版本,您可能需要一个插入前触发器和一个序列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        相关资源
        最近更新 更多