在Oracle表中进行关键词搜索的过程


Posted in Oracle onJune 10, 2022

在Oracle表中的关键词搜索

在Oracle数据库中,我们可以很容易地在模式内的表中找到我们正在寻找的文本或关键词。

请阅读以了解该过程的步骤。

在Oracle数据库中,我们可以很容易地在模式内的表中找到我们要找的文本或关键词。由于我们可以搜索模式中的所有表,我们也可以在属于该模式的所需表内进行搜索。

如下面的PL/SQL块所示,我们要搜索的文本/关键词是在相关表的varchar列上进行的。

  • 首先,我们在PL/SQL代码块的DECLARATION部分指定 "p_search_text" -->要搜索的常量文本。
  • 在最下面一行,我们指定SCHEMA NAME为一个常量。
  • 在下一行中,我们指定了TABLE NAME。
  • 当我们把TABLE NAME字段传递为空时,我们搜索该模式中的所有表。
  • 如果我们把TABLE NAME传满,我们应该注意该模式中的表。否则,我们的搜索将找不到任何记录。

如上所述输入我们的定义后,我们可以通过Oracle SQL Developer或Toad运行下面的PL/SQL块。

PLSQL

DECLARE
    p_search_text      CONSTANT VARCHAR2 (1000) := 'SAMPLE SEARCH WRITE';
    p_schema_name      CONSTANT VARCHAR2 (1000) := 'SAMPLE SCHEMA NAME'; 
    p_table_name       CONSTANT VARCHAR2 (1000) := 'SAMPLE TABLE NAME';-- NULL (If FULL will work, give the table name null)

    TYPE r_column_data IS RECORD
    (
        column_name    SYS.DBA_TAB_COLUMNS.COLUMN_NAME%TYPE
    );

    TYPE tr_column_data IS TABLE OF r_column_data
        INDEX BY PLS_INTEGER;

    ltr_column_data             tr_column_data;

    TYPE tr_table IS TABLE OF VARCHAR2 (200)
        INDEX BY PLS_INTEGER;

    l_sql                       VARCHAR2 (1000);
    l_count                     NUMBER;
    ltr_table                   tr_table;
    l_found                     NUMBER := 0;
    l_column_name               VARCHAR2 (100);
BEGIN
      SELECT table_name
        BULK COLLECT INTO ltr_table
        FROM dba_tables
       WHERE     owner = p_schema_name
             AND table_name LIKE '' || p_table_name || '' || '%'
             AND ROWNUM <= 19999
    ORDER BY 1;

    DBMS_APPLICATION_INFO.set_module ('PV_FINDER', NULL);

    FOR i IN 1 .. ltr_table.COUNT
    LOOP
        DBMS_APPLICATION_INFO.set_client_info (
            i || '/' || ltr_table.COUNT || ' -> ' || ltr_table (i));

          SELECT col.column_name
            BULK COLLECT INTO ltr_column_data
            FROM sys.dba_tab_columns col
                 INNER JOIN sys.dba_tables t
                     ON col.owner = t.owner AND col.table_name = t.table_name
           WHERE col.table_name = ltr_table (i) AND col.DATA_TYPE = 'VARCHAR2'
        ORDER BY col.column_id;

        FOR j IN 1 .. ltr_column_data.COUNT
        LOOP
            DBMS_APPLICATION_INFO.set_client_info (
                   j
                || '/'
                || ltr_column_data.COUNT
                || ' -> '
                || ltr_column_data (j).column_name);

            l_sql :=
                   'SELECT /*+ PARALLEL (A 8)*/ count(1) from '
                || p_schema_name
                || '.'
                || ltr_table (i)
                || ' A WHERE '
                || ltr_column_data (j).column_name
                || ' ='''
                || p_search_text
                || '''';

            EXECUTE IMMEDIATE l_sql INTO l_count;

            IF l_count > 0
            THEN
                IF l_found = 0
                THEN
                    DBMS_OUTPUT.put_line (
                        'Search Keyword: ' || p_search_text);
                    DBMS_OUTPUT.put_line (
                        '-------------------------------------------');
                END IF;

                DBMS_OUTPUT.put_line ('table name found : '||ltr_table (i) );
                DBMS_OUTPUT.put_line ('column name found : ' || ltr_column_data (j).column_name);
                DBMS_OUTPUT.put_line ('count : ' || l_count);
                DBMS_OUTPUT.put_line ('sql name : ' || l_sql);
                DBMS_OUTPUT.put_line ('*****');

                l_found := l_found + 1;
            END IF;
        END LOOP;
    END LOOP;

    DBMS_APPLICATION_INFO.set_module (NULL, NULL);
    DBMS_APPLICATION_INFO.set_client_info (NULL);
    DBMS_OUTPUT.put_line ('-------------------------------------------');
    DBMS_OUTPUT.put_line ('total number of tables searched : ' || ltr_table.COUNT);
    DBMS_OUTPUT.put_line ('total number of tables found : ' || l_found);
END;

/*select module,client_info from v$session where module like '%PV_FINDER%'*/

结果部分。

  • 如果我们搜索的关键词/文本在相关的表中找到了,找到的表的名称和找到的列的名称,数量,以及查询信息都会被写出来。
  • 在底部是一般的总信息。我们可以看到搜索到的表的总数以及这些表中有多少被找到。
Search Keyword: SAMPLE SEARCH KEYWORD
-------------------------------------------
table name found : TABLE - 1
column name found : COLUMN NAME 
count : 4
sql name : SELECT /*+ PARALLEL (A 8)*/ count(1) from SCHEMA_NAME.TABLE-1 A WHERE TABLE-1.COLUMN ='SAMPLE SEARCH KEYWORD'
*****
table name found : TABLE - 2
column name found : COLUMN NAME 
count : 2
sql name : SELECT /*+ PARALLEL (A 8)*/ count(1) from SCHEMA_NAME.TABLE-2 A WHERE TABLE-1.COLUMN ='SAMPLE SEARCH KEYWORD'
*****
table name found : TABLE - 3
column name found : COLUMN NAME 
count : 2
sql name : SELECT /*+ PARALLEL (A 8)*/ count(1) from SCHEMA_NAME.TABLE-3 A WHERE TABLE-1.COLUMN ='SAMPLE SEARCH KEYWORD'
*****
table name found : TABLE - 4
column name found : COLUMN NAME 
count : 2
sql name : SELECT /*+ PARALLEL (A 8)*/ count(1) from SCHEMA_NAME.TABLE-4 A WHERE TABLE-1.COLUMN ='SAMPLE SEARCH KEYWORD'
*****
-------------------------------------------
total number of tables searched : 72
total number of tables found : 4

oracle, plsql, oracle数据库, oracle表, 关键字搜索

DZone贡献者所表达的观点属于他们自己。

到此这篇关于在Oracle表中进行关键词搜索的过程的文章就介绍到这了!

Oracle 相关文章推荐
ORACLE数据库对long类型字段进行模糊匹配的解决思路
Apr 07 Oracle
Oracle设置DB、监听和EM开机启动的方法
Apr 25 Oracle
ORACLE查看当前账号的相关信息
Jun 18 Oracle
Oracle以逗号分隔的字符串拆分为多行数据实例详解
Jul 16 Oracle
oracle索引总结
Sep 25 Oracle
Oracle 临时表空间SQL语句的实现
Sep 25 Oracle
关于Oracle12C默认用户名system密码不正确的解决方案
Oct 16 Oracle
oracle重置序列从0开始递增1
Feb 28 Oracle
Oracle 多表查询基本语法实例
Apr 18 Oracle
SQL试题 使用窗口函数选出连续3天登录的用户
Apr 24 Oracle
解决Oracle数据库用户密码过期
May 11 Oracle
在Oracle表中进行关键词搜索的过程
Jun 10 Oracle
Oracle锁表解决方法的详细记录
Jun 05 #Oracle
oracle数据库去除重复数据
May 20 #Oracle
解决Oracle数据库用户密码过期
May 11 #Oracle
Oracle中DBLink的详细介绍
instantclient客户端 连接oracle数据库
清空 Oracle 安装记录并重新安装
SQL试题 使用窗口函数选出连续3天登录的用户
You might like
php适配器模式介绍
2012/08/14 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
js的with语句使用方法
2007/09/21 Javascript
javascript indexOf函数使用说明
2008/07/03 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
js href的用法
2010/05/13 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
深入理解Django的自定义过滤器
2017/10/17 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
遗传算法python版
2018/03/19 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
幼儿教师考核制度
2014/01/25 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
群众路线剖析材料
2014/09/30 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
Python中第三方库Faker的使用详解
2022/04/02 Python