2017-01-03 3 views
0

오라클 APEX 애플리케이션을 통해 전체 텍스트를 검색 할 수 있도록 3 열의 테이블이 있어야합니다. 세 열 모두에 대한 색인을 생성하여 모두 검색 할 수 있습니까?컨텍스트 전체 텍스트 검색에 대해 동일한 테이블의 여러 열을 인덱싱합니까?

현재 나는 하나의 열 (STOP_NAME)에 상황에 맞는 색인이 있습니다

DECLARE 

    l_query VARCHAR2(4000); 

BEGIN 

    l_query:= 
    'select 
    "BUS_STOP_ID", 
    "STOP_NAME", 
    "DESC_NOTES", 
    "BUS_NUMBERS", 
    "LOCATION" 
    from "BUS_STOPS" '; 

    IF v('P2_REPORT_SEARCH') IS NOT NULL THEN 
    l_query := l_query||' '||' 
    where 
    ( 
    CONTAINS(STOP_NAME, ''$'|| v('P2_REPORT_SEARCH') ||''') > 0 
    ) 
    '; 
    END IF; 

    RETURN l_query; 

END; 

하지만 어떻게 내가 텍스트 검색에 세 개의 열 (stop_name, desc_notes, bus_numbers)를 사용하여 인덱스를 만들 수 있습니까? 나는 3 열을 사용하여 만드는 표준 인덱스를 사용하여 시도했지만 작동하지 않았다 :

BEGIN 
ctx_ddl.create_preference('my_multi_idx', 'MULTI_COLUMN_DATASTORE'); 
ctx_ddl.set_attribute('my_multi_idx', 'COLUMNS', 'stop_name, desc_notes, bus_numbers'); 
END; 

이전에 설정 한 환경 설정을 사용하여 인덱스 자체를 만들어 이어 :

CREATE INDEX bus_stops_ctx_idx 
ON bus_stops (stop_name, bus_numbers, desc_notes) 
INDEXTYPE IS ctxsys.context; 
+2

SQL 주입 경고! 이것을 대신 사용해보십시오 :'CONTAINS (STOP_NAME, ''$ ''|| : P2_REPORT_SEARCH)> 0' –

답변

0

첫 번째 단계는 인덱싱 환경을 만드는 것이 었습니다 :

CREATE INDEX bus_stops_ctx_idx 
ON bus_stops(stop_name) 
INDEXTYPE IS CTXSYS.CONTEXT 
PARAMETERS ('DATASTORE my_multi_idx SYNC (ON COMMIT)');