在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 DGMGRL ORA-16603报错的解决方法(DG Broker)
Apr 06 Oracle
zabbix agent2 监控oracle数据库的方法
May 13 Oracle
oracle覆盖导入dmp文件的2种方法
May 21 Oracle
Oracle创建只读账号的详细步骤
Jun 07 Oracle
快速学习Oracle触发器和游标
Jun 30 Oracle
oracle重置序列从0开始递增1
Feb 28 Oracle
Lakehouse数据湖并发控制陷阱分析
Mar 31 Oracle
Oracle使用别名的好处
Apr 19 Oracle
Oracle中DBLink的详细介绍
Apr 29 Oracle
解决Oracle数据库用户密码过期
May 11 Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
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 源代码压缩小工具
2009/12/22 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
php实用代码片段整理
2016/11/12 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
python flask中动态URL规则详解
2019/11/22 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
2015年检验科工作总结
2015/04/27 职场文书
党支部综合考察意见
2015/06/01 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
nginx实现动静分离的方法示例
2021/11/07 Servers
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
Golang解析JSON对象
2022/04/30 Golang