在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笔记
Apr 05 Oracle
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
Apr 06 Oracle
Oracle 数据仓库ETL技术之多表插入语句的示例详解
Apr 12 Oracle
zabbix agent2 监控oracle数据库的方法
May 13 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
Oracle表空间与权限的深入讲解
Nov 17 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
分析SQL窗口函数之排名窗口函数
Apr 21 Oracle
清空 Oracle 安装记录并重新安装
Apr 26 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
Oracle删除归档日志及添加定时任务
Jun 28 Oracle
oracle设置密码复杂度及设置超时退出的功能
Jun 28 Oracle
Oracle锁表解决方法的详细记录
Jun 05 #Oracle
oracle数据库去除重复数据
May 20 #Oracle
解决Oracle数据库用户密码过期
May 11 #Oracle
Oracle中DBLink的详细介绍
instantclient客户端 连接oracle数据库
清空 Oracle 安装记录并重新安装
SQL试题 使用窗口函数选出连续3天登录的用户
You might like
php去除重复字的实现代码
2011/09/16 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
$.ajax json数据传递方法
2008/11/19 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
python3.7添加dlib模块的方法
2020/07/01 Python
Python基于Faker假数据构造库
2020/11/30 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
获奖的大学生创业计划书
2014/01/05 职场文书
迎元旦广播稿
2014/02/22 职场文书
10的分与合教学反思
2014/04/30 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
教师创先争优承诺书
2015/04/27 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
Python实现自动玩连连看的脚本分享
2022/04/04 Python