在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 数据仓库ETL技术之多表插入语句的示例详解
Apr 12 Oracle
使用Oracle跟踪文件的问题详解
Jun 28 Oracle
RPM包方式安装Oracle21c的方法详解
Aug 23 Oracle
关于Oracle12C默认用户名system密码不正确的解决方案
Oct 16 Oracle
详解Oracle块修改跟踪功能
Nov 07 Oracle
Oracle数据库中通用的函数实例详解
Mar 25 Oracle
Lakehouse数据湖并发控制陷阱分析
Mar 31 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
分析SQL窗口函数之取值窗口函数
Apr 21 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
Oracle查看表空间使用率以及爆满解决方案详解
Jul 23 Oracle
Oracle锁表解决方法的详细记录
Jun 05 #Oracle
oracle数据库去除重复数据
May 20 #Oracle
解决Oracle数据库用户密码过期
May 11 #Oracle
Oracle中DBLink的详细介绍
instantclient客户端 连接oracle数据库
清空 Oracle 安装记录并重新安装
SQL试题 使用窗口函数选出连续3天登录的用户
You might like
用PHP产生动态的影像图
2006/10/09 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
php解析url的三个示例
2014/01/20 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
js使用心得分享
2015/01/13 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
Python制作词云的方法
2018/01/03 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
Python编程中类与类的关系详解
2019/08/08 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
李培根演讲稿
2014/05/22 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
婚前保证书范文
2015/02/28 职场文书
中英文求职信范文
2015/03/19 职场文书
原告代理词范文
2015/05/25 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python