2010-07-15 3 views
0

내 직원 테이블에 MetaKeys 열이 있습니다.Oracle의 열에서 특정 값 검색

MetaKeys="DocType=1***SubDocType=2***MinValue=123" 

가 어떻게 내 테이블을 조회하고 MetaKeys 열에서 바로 SubDocType 값을 가져 않습니다 : 그것은 아래와 같은 값을 포함?

Select * from employee where Metakeys contains SubDocType=2 
+0

이 열에는 3 비트의 정보가 있습니다. 이런 종류의 쿼리를 작성해야 할 필요가있는 경우에는 시간을 분할해야 할 것입니다. –

답변

0

이 정보를 정규화해야 할 수도있는 Martin Smith에 동의합니다.

SELECT SUBSTR (expr, INSTR (expr, '=') + 1) subdoctypeval 
    FROM (SELECT REGEXP_SUBSTR ('DocType=1***SubDocType=2***MinValue=123', 
           'SubDocType=[^*]+', 
           1, 
           1) 
        expr 
      FROM DUAL) 
0
SELECT * FROM employee WHERE Metakeys LIKE '%SubDocType=2%' 

그것은 당신이 어떤 색인 혜택을받을하지 않을거야 때문에 쿼리를 수행하는 가장 효율적인 방법은 아니지만, 그것을 작동합니다.

0

EMPLOYEE 테이블에서 metakeys 열하지만, ​​대신 EMPLOYEE_METAKEY 테이블이 아니라 있도록 디자인을 수정한다 할 올바른 일 : 말했다되는 것으로, 여기 당신을 위해 작동 할 수 있습니다 하나 개의 가능한 솔루션입니다 : 여러 키 - 값 쌍을 가진 직원을 찾을 때

CREATE TABLE EMPLOYEE_KEY_VALUES 
(EMP_ID   number, 
EMP_METAKEY  VARCHAR2(100), 
EMP_METAVALUE VARCHAR2(1000), 
constraint EMPLOYEE_METAKEYS_PK primary key (EMP_ID, EMP_METAKEY) using index, 
constraint EMPLOYEE_METAKEYS_FK01 foreign key (EMP_ID) 
    references EMPLOYEE (EMP_ID) on delete cascade 
); 

이 디자인은 metakey 검색을 수행 할 때 직원 테이블을 통해 트롤해야하는 성능 문제가되지 않습니다, 당신은 정규 표현식에 쓰기 할 필요가 없습니다 .

관련 문제