【发布时间】:2017-05-17 15:15:22
【问题描述】:
我有一个包含 3 列的表,需要通过 Oracle APEX 应用程序启用全文搜索。如何为所有三列创建索引以便可以搜索它们?
目前我在一列 (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 列创建标准索引,但它不起作用:
CREATE INDEX bus_stops_ctx_idx
ON bus_stops (stop_name, bus_numbers, desc_notes)
INDEXTYPE IS ctxsys.context;
【问题讨论】:
-
SQL 注入警报!试试这个:
CONTAINS(STOP_NAME, ''$''|| :P2_REPORT_SEARCH) > 0 -
您能否解释一下这如何防止 sql 注入以及 $ 如何不阻止返回值。
标签: oracle oracle-sqldeveloper oracle-apex