从Oracle的表的任何列搜索数据

时间:2018-02-01 10:38:10

标签: oracle stored-procedures

我想在这里实现一个搜索逻辑。我想要的是,

用户在搜索框中输入任何文本,然后按Enter 。然后应该发生的是,它应该在任何列的表中搜索并且记录存在然后它应该显示。

目前我尝试的是,它从表格中的一列搜索。以下是代码,

PROCEDURE GET_SEARCH_DATA
(
  P_INPUTTEXT IN NVARCHAR2,
  P_RETURN OUT SYS_REFCURSOR 
)

AS

BEGIN
  OPEN P_RETURN FOR

SELECT APP_MST_ID, APPLICATIONNAME, PROJECTNO, VSS_FOLDER_LOC FROM 
APPLICATION_MASTER WHERE APPLICATIONNAME LIKE  '%'|| P_INPUTTEXT || '%';

 END;

所以我想要的是,它应该从表的每一列搜索并显示结果。请帮忙

1 个答案:

答案 0 :(得分:1)

这是一个相当简陋的解决方案"它检查所有表及其列(来自USER_TAB_COLUMNS)并检查其中哪些包含搜索字符串;它显示一个表,一列和出现次数。

SQL> declare
  2     l_str   varchar2 (500);
  3     l_cnt   number := 0;
  4  begin
  5     for cur_r in (select u.table_name, u.column_name
  6                     from user_tab_columns u)
  7     loop
  8        l_str :=
  9              'SELECT COUNT(*) FROM '
 10           || cur_r.table_name
 11           || ' WHERE '
 12           || upper (cur_r.column_name)
 13           || ' like (''%&search_string%'')';
 14
 15        execute immediate (l_str) into l_cnt;
 16
 17        if l_cnt > 0
 18        then
 19           dbms_output.put_line (
 20              cur_r.table_name || '.' || cur_r.column_name || ': ' || l_cnt);
 21        end if;
 22     end loop;
 23  end;
 24  /
Enter value for search_string: MANAGE
EMP.JOB: 3

PL/SQL procedure successfully completed.

SQL> /
Enter value for search_string: ACCOU
DEPT.DNAME: 1

PL/SQL procedure successfully completed.

SQL>