在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 区块链表创建过程详解
May 15 Oracle
oracle连接ODBC sqlserver数据源的详细步骤
Jul 25 Oracle
C#连接ORACLE出现乱码问题的解决方法
Oct 05 Oracle
Oracle安装TNS_ADMIN环境变量设置参考
Nov 01 Oracle
Oracle表空间与权限的深入讲解
Nov 17 Oracle
详解Oracle数据库中自带的所有表结构(sql代码)
Nov 20 Oracle
Oracle中update和select 关联操作
Jan 18 Oracle
详解SQL的窗口函数
Apr 21 Oracle
Oracle用户管理及赋权
Apr 24 Oracle
Oracle中DBLink的详细介绍
Apr 29 Oracle
oracle delete误删除表数据后如何恢复
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/09/30 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
JavaScript继承方式实例
2010/10/29 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
js实现select下拉框选择
2020/01/11 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
python如何实现一个刷网页小程序
2018/11/27 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
经典婚礼主持开场白
2014/03/13 职场文书
社区党建工作方案
2014/06/10 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
庆元旦演讲稿
2014/09/15 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书