2017-12-08 7 views
2

1つのテーブルには3つのカラムがあり、これらの3つのカラムから値をマージし、これらの3つの値をマージした後にプライマリキーとして生成します。 のCol1COL2 & COL3有するデータ型長ながら5 & それぞれ、データ型長さ4を有します。いずれかの値が最大長さより小さい場合COL2 & COL3に次いでとLPADを使用し、後に主キーに合流。3列のマージ値を照会し、Oracleの主キーとしてマージする

EX-その後、COL1 = 1234、COL2 = 142、col3という= 32場合、それは主キーとして"123400142032"ようにする必要がありマージした後。

答えて

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); 

:CREATE TABLEスクリプトは単なる理解のためです。すでにテーブルがあるので、必要ないかもしれません。

仮想列の構文GENERATED .. ASは、11g以上でのみ動作します。下位バージョンの場合は、前に挿入トリガーとシーケンスが必要な場合があります。

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のようにそれを想定することができます。..

関連する問題