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.