我有一个要求,我无法追踪如何制作此功能。因为这就是我想要的。
我将有一个搜索图标,点击该图标将打开textbox
。现在,用户可以将任何文本插入textbox
,然后点击搜索,它将从包含oracle中12-15个表的数据库表中搜索</ em>
所以我的问题是,如何继续这样做,这样做是否合乎逻辑。或者请建议任何其他方式来实现这一点。
请建议
更新
我已经为一张桌子做过这个,但是我希望这可以用于我将来有多少桌子。
PROCEDURE GET_SEARCH_DATA
(
P_INPUTTEXT IN NVARCHAR2,
P_RETURN OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN P_RETURN FOR
SELECT DISTINCT APP_MST_ID, APPLICATIONNAME, PROJECTNO, VSS_FOLDER_LOC
FROM APPLICATION_MASTER
WHERE APPLICATIONNAME LIKE '%'|| P_INPUTTEXT || '%'
OR PROJECTNO LIKE '%' || P_INPUTTEXT || '%'
OR VSS_FOLDER_LOC LIKE '%' || P_INPUTTEXT || '%';
END;
答案 0 :(得分:2)
15个表*每列10列= 150列(例如)。你想搜索哪些?他们都是?只有其中一些?
如果为ALL,则循环遍历所有表和列(USER_TABLES与USER_TAB_COLUMNS连接)并搜索该字符串。如果是某些列,则将这些列包含在游标FOR循环的SELECT语句的WHERE子句中。你选择的任何选项,都闻起来像一个动态的SQL。
以下是我如何进行此操作的示例,搜索所有包含名为TELEPHONE(电话号码)列的表格;搜索字符串是&#34; 654&#34;使用LIKE运算符,以便返回包含TELEPHONE列的所有表,电话号码包含654.结果显示为DBMS_OUTPUT.PUT_LINE(因为我从SQL * Plus运行它)。您的输出可能是其他内容。
看看,必要时进行调整。
DECLARE
l_str VARCHAR2(500);
l_cnt NUMBER := 0;
BEGIN
FOR cur_r IN (SELECT u.table_name, u.column_name
FROM user_tab_columns u, user_tables t
WHERE u.table_name = t.table_name
AND u.column_name = 'TELEPHONE'
)
LOOP
l_str := 'SELECT COUNT(*) FROM ' || cur_r.table_name ||
' WHERE ' || cur_r.column_name || ' like (''%654%'')';
EXECUTE IMMEDIATE (l_str) INTO l_cnt;
IF l_cnt > 0 THEN
dbms_output.put_line(l_cnt ||' : ' || cur_r.table_name);
END IF;
END LOOP;
END;
答案 1 :(得分:0)
您还可以创建一个包含两列
的表CREATE TABLE table1
(value_col VARCHAR2(4000), query_col VARCHAR2(4000));
使用PL / SQL Littlefoot做的,稍微修改它以便将数据插入表中
因此,如果您执行搜索,则只需使用下面的查询
SELECT query_col
FROM table1
WHERE value_col LIKE '%'||INPUT_TEXT||'%';
对于query_col值,您可以使用它来获取REF CURSOR记录并将其显示在前端。
答案 2 :(得分:0)
根据您在一张桌子上搜索,您应该使用下面的联合。
select c1, c2, c3, c4 from (
select distinct column1 as c1, column2 as c2, column3 as c3, column4 as c4
from table1 where column1 like '%'|| para ||'%' or column2 like '%'|| para ||'%' or column3 like '%'|| para ||'%' or column4 like '%'|| para ||'%'
union all
select distinct column1 as c1, column2 as c2, column3 as c3, '' as c4
from table2 where column1 like '%'|| para ||'%' or column2 like '%'|| para ||'%' or column3 like '%'|| para ||'%'
union all
select distinct column1 as c1, column2 as c2, column3 as c3, '' as c4
from table3 where column1 like '%'|| para ||'%' or column2 like '%'|| para ||'%' or column3 like '%'|| para ||'%'
)tbl.
希望这会有所帮助。