2017-12-08 1 views
2

하나의 테이블에 몇 개의 열이 있고 3 개의 열에이 3 개의 열의 값을 병합하고이 3 개의 값을 병합 한 후 기본 키로 생성하려고합니다. COL1& COL2 COL3 갖는 데이터 유형 길이 동안 5 & 3 각각 데이터 유형 길이를 갖는 4. 어떤 값의 최대 길이보다 작은 경우 & COL2 COL3에서 다음 와 0에게 LPAD을 사용하고 이후 기본 키에 병합.3 열의 병합 값 쿼리 및 Oracle의 기본 키로 병합

전직은 COL1 = 1234 COL3 32 = 142 = COL2는 병합 후에는 "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); 

: 작성 테이블 스크립트는 단지 이해를위한 것입니다. 기존 테이블이 이미 있으므로 필요하지 않을 수도 있습니다.

가상 열 구문 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, 당신은 ...

1 열 및 2 열로 가정 할 수있다