Asp.net 使用mvc和oracle从多个表中搜索数据库
我有一个需求,我无法跟踪如何实现这个功能。因为我想要的是 我将有一个搜索图标,单击该图标将打开一个Asp.net 使用mvc和oracle从多个表中搜索数据库,asp.net,asp.net-mvc,oracle,search,Asp.net,Asp.net Mvc,Oracle,Search,我有一个需求,我无法跟踪如何实现这个功能。因为我想要的是 我将有一个搜索图标,单击该图标将打开一个文本框。现在,用户可以将任何文本插入文本框,单击搜索,它将从oracle中由12-15个表组成的数据库表中进行搜索 所以我这里的问题是,如何继续进行,这样做在逻辑上是否正确。或者,请提出任何其他实施方法 请建议 更新 我已经为一张桌子做了这项工作,但我希望这项工作能为我将来拥有的许多桌子工作 15个表*10列每个表=150列(例如)。您要搜索其中的哪一个?都是吗?只有一部分 如果全部,您将遍历所有表
文本框
。现在,用户可以将任何文本插入文本框
,单击搜索,它将从oracle中由12-15个表组成的数据库表中进行搜索
所以我这里的问题是,如何继续进行,这样做在逻辑上是否正确。或者,请提出任何其他实施方法
请建议
更新
我已经为一张桌子做了这项工作,但我希望这项工作能为我将来拥有的许多桌子工作
15个表*10列每个表=150列(例如)。您要搜索其中的哪一个?都是吗?只有一部分 如果全部,您将遍历所有表和列(与USER\u TAB\u列连接的USER\u表)并搜索该字符串。如果是某些列,则应将这些列包括在游标FOR循环的SELECT语句的WHERE子句中。您选择的任何选项,闻起来都像动态SQL 这里有一个例子说明我是如何做的,搜索所有有一列名为TELEPHONE(电话号码)的表;带有LIKE运算符的搜索字符串为“654”,因此它返回包含电话列的所有表,电话号码包含654。结果显示在DBMS_OUTPUT.PUT_行中(因为我正在从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;
您还可以创建一个包含两列的表
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||'%';
对于查询列值,您可以使用它来获取REF CURSOR记录,并将其显示在前端。根据您对一个表的搜索,您应该像下面这样使用union
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.
希望这会有所帮助。谢谢您的回复和回答,但这是正确的方法还是您有其他方法来实现这一点?任何建议都会很好的,我就是这样做的。其他人可能会建议另一种方法,所以请耐心等待。您希望搜索所有表中的哪些列?都是吗?Id、日期、数字,还是有一些分段的集合?@KrisRice:除了Id和日期之外,几乎所有的coumn都不会被搜索。你能帮我吗?所以,有几个问题:1。是否需要一个带有
SYS\u REFCURSOR
out参数的程序?2.您是否需要在所有15个表中只对DB进行一次搜索?@Dmitry:不,这不是必需的,我只是添加了它,以便返回一些值并在前端显示。对于你的第二个问题,是的,因为任何表格中都可能有数据,所以我应该怎么做?我又读了一遍这个问题,似乎我以前没有注意到:如果将来出现一个新表,查询也应该使用它,对吗?在这种情况下,如何定义要搜索的表?在某个模式的所有表中,还是以任何其他方式?
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.