使用mvc和oracle从多个表中搜索数据库

时间:2018-01-30 05:34:55

标签: asp.net asp.net-mvc oracle search

我有一个要求,我无法追踪如何制作此功能。因为这就是我想要的。

我将有一个搜索图标,点击该图标将打开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;

3 个答案:

答案 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.

希望这会有所帮助。