`
123003473
  • 浏览: 1061790 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ORACLE中如何查找特定对象中的文本内容~

 
阅读更多
[c-sharp] view plaincopy
SQL> select dbms_metadata.get_ddl('PROCEDURE','PRO2','SCOTT') text from dual; 
 
TEXT 
---------------------------------------- 
 
  CREATE OR REPLACE PROCEDURE "SCOTT"."P 
RO2" 
is 
begin 
dbms_output.put_line('wangpeng up'); 
end; 
 
 
 
SQL> select dbms_metadata.get_ddl('PROCEDURE','PRO1','SCOTT') text from dual; 
 
TEXT 
---------------------------------------- 
 
  CREATE OR REPLACE PROCEDURE "SCOTT"."P 
RO1" 
is 
begin 
dbms_output.put_line('wanghai up'); 
end; 
 
SQL> select * from( 
  2  SELECT NAME , LINE , 'Create or Replace ' || TEXT as text 
  3    FROM USER_SOURCE 
  4  WHERE TYPE = 'PROCEDURE' 
  5    AND LINE = 1 
  6  UNION 
  7  SELECT NAME, LINE, TEXT as text 
  8    FROM USER_SOURCE 
  9  WHERE TYPE = 'PROCEDURE' 
10    AND LINE > 1 
11  UNION 
12  SELECT NAME, 999999 , '/' as text 
13    FROM USER_SOURCE 
14  WHERE TYPE = 'PROCEDURE' 
15    AND LINE = 1 
16  ORDER BY 1, 2 
17  ) c 
18  where UPPER(c.text) like '%WANGHAI%'; 
 
NAME          LINE TEXT 
---------- ------- ---------------------------------------- 
PRO1             4 dbms_output.put_line('wanghai up'); 
 
SQL> select * from( 
  2  SELECT NAME , LINE , 'Create or Replace ' || TEXT as text 
  3    FROM USER_SOURCE 
  4  WHERE TYPE = 'PROCEDURE' 
  5    AND LINE = 1 
  6  UNION 
  7  SELECT NAME, LINE, TEXT as text 
  8    FROM USER_SOURCE 
  9  WHERE TYPE = 'PROCEDURE' 
10    AND LINE > 1 
11  UNION 
12  SELECT NAME, 999999 , '/' as text 
13    FROM USER_SOURCE 
14  WHERE TYPE = 'PROCEDURE' 
15    AND LINE = 1 
16  ORDER BY 1, 2 
17  ) c 
18  where UPPER(c.text) like '%WANGPENG%'; 
 
NAME          LINE TEXT 
---------- ------- ---------------------------------------- 
PRO2             4 dbms_output.put_line('wangpeng up'); 
 
SQL> select * from( 
  2  SELECT NAME , LINE , 'Create or Replace ' || TEXT as text 
  3    FROM USER_SOURCE 
  4  WHERE TYPE = 'PROCEDURE' 
  5    AND LINE = 1 
  6  UNION 
  7  SELECT NAME, LINE, TEXT as text 
  8    FROM USER_SOURCE 
  9  WHERE TYPE = 'PROCEDURE' 
10    AND LINE > 1 
11  UNION 
12  SELECT NAME, 999999 , '/' as text 
13    FROM USER_SOURCE 
14  WHERE TYPE = 'PROCEDURE' 
15    AND LINE = 1 
16  ORDER BY 1, 2 
17  ) c 
18  where c.text like '%dbms_output.put_line%'; 
 
NAME          LINE TEXT 
---------- ------- ---------------------------------------- 
PRO1             4 dbms_output.put_line('wanghai up'); 
PRO2             4 dbms_output.put_line('wangpeng up'); 

今天在论坛中一个帖子中的回帖里看到这个方法的,以前确实没想过还有这种方法,呵呵,真是各种牛人都有啊。
顺便学习了一下USER_SOURCE视图,以前确实没有用过这个
ALL_SOURCE
ALL_SOURCE describes the text source of the stored objects accessible to the current user.
Related Views
DBA_SOURCE describes the text source of all stored objects in the database.
USER_SOURCE describes the text source of the stored objects owned by the current user. This view does not display the OWNER column.
Column Datatype NULL Description
OWNER VARCHAR2(30) NOT NULL Owner of the object
NAME VARCHAR2(30) NOT NULL Name of the object
TYPE VARCHAR2(12) Type of object: FUNCTION, JAVA SOURCE, PACKAGE, PACKAGE BODY, PROCEDURE, TRIGGER, TYPE, TYPE BODY
LINE NUMBER NOT NULL Line number of this line of source
TEXT VARCHAR2(4000) Text source of the stored object
SQL> select distinct type from user_source;
TYPE
------------------------
PROCEDURE
PACKAGE
PACKAGE BODY
TYPE BODY
TRIGGER
FUNCTION
已选择6行。

可以看出来,如果像在上面这六种类型的对象中查找特定的字符串的话,前面的方法应该还是挺通用的。
SQL> select name,line,text from all_source where owner='SCOTT' and type='PROCEDU
RE';
NAME          LINE TEXT
---------- ------- ----------------------------------------
PRO1             1 procedure pro1
PRO1             2 is
PRO1             3 begin
PRO1             4 dbms_output.put_line('wanghai up');
PRO1             5 end;
PRO2             1 procedure pro2
PRO2             2 is
PRO2             3 begin
PRO2             4 dbms_output.put_line('wangpeng up');
PRO2             5 end;
已选择10行。
对比前面的查询语句中两个地方需要解释一下
select * from(
SELECT NAME , LINE, 'Create or Replace ' || TEXT as text
  FROM USER_SOURCE
WHERE TYPE = 'PROCEDURE'
  AND LINE = 1
UNION
SELECT NAME , LINE, TEXT as text
  FROM USER_SOURCE
WHERE TYPE = 'PROCEDURE'
  AND LINE > 1
UNION
SELECT NAME , 999999, '/' as text
  FROM USER_SOURCE
WHERE TYPE = 'PROCEDURE'
  AND LINE = 1
ORDER BY 1, 2
) c
where UPPER(c.text) like '%WANGHAI%';
可以看到,从USER_SOURCE中直接查询出的第一行只有procedure pro1而已,和我们创建过程的语句相差Create or Replace 。
而且我们一般创建过程的结尾会加一个/,这就是第二处标记红色部分的作用。我们取掉外层的SELECT,看看里面返回的结果就知道了。
[c-sharp] view plaincopy
SQL> SELECT NAME , LINE, 'Create or Replace ' || TEXT as text 
  2    FROM USER_SOURCE 
  3  WHERE TYPE = 'PROCEDURE' 
  4    AND LINE = 1 
  5  UNION 
  6  SELECT NAME , LINE, TEXT as text 
  7    FROM USER_SOURCE 
  8  WHERE TYPE = 'PROCEDURE' 
  9    AND LINE > 1 
10  UNION 
11  SELECT NAME , 999999, '/' as text 
12    FROM USER_SOURCE 
13  WHERE TYPE = 'PROCEDURE' 
14    AND LINE = 1 
15  ORDER BY 1, 2; 
 
NAME          LINE TEXT 
---------- ------- ---------------------------------------- 
PRO1             1 Create or Replace procedure pro1 
PRO1             2 is 
PRO1             3 begin 
PRO1             4 dbms_output.put_line('wanghai up'); 
PRO1             5 end; 
PRO1        999999 / 
PRO2             1 Create or Replace procedure pro2 
PRO2             2 is 
PRO2             3 begin 
PRO2             4 dbms_output.put_line('wangpeng up'); 
PRO2             5 end; 
 
NAME          LINE TEXT 
---------- ------- ---------------------------------------- 
PRO2        999999 / 
 
已选择12行。 

至于那个999999,你随便写什么都可以,只是个标记而已。

===============================================================================
一个朋友提供了种简便点的写法
[c-sharp] view plaincopy
SQL> select distinct name from user_source 
  2  where type='PROCEDURE' 
  3  and lower(text) like '%wanghai%' 
  4  ; 
 
NAME 
---------- 
PRO1 
 
SQL> select distinct name from user_source 
  2  where type='PROCEDURE' 
  3  and lower(text) like '%wangpeng%'; 
 
NAME 
---------- 
PRO2 


不过还有一个没有解决的问题,那就是如果需要查找的内容被分行输入的话,怎么办?
[c-sharp] view plaincopy
SQL> create procedure pro3 
  2  is 
  3  begin 
  4  dbms_output.put_line('wang 
  5  hai 
  6  up'); 
  7  end; 
  8  / 
 
过程已创建。 
 
SQL> select distinct name from user_source 
  2  where type='PROCEDURE' 
  3    and lower(text) like '%wang%hai%';  --这里在wang和hai之间加了%也不行 
 
NAME 
---------- 
PRO1 

【转载】http://blog.csdn.net/wh62592855/article/details/4866178
分享到:
评论

相关推荐

    oracle数据库对象导出脚本

    这使得用户能够轻松地备份或迁移数据库中的特定对象,而不必手动编写复杂的查询。 #### 标签:Oracle对象 这个标签进一步强调了文档的主要关注点是Oracle数据库中的各种对象。 ### 详细内容分析 #### 脚本前言 ...

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    但每种数据库系统都有其特性,因此在实际操作中可能需要调整上述步骤以适应特定的数据库平台。 总之,将DB2中的BLOB数据复制到Oracle涉及多个步骤,包括利用WII的联邦功能、添加标志字段以及定制更新策略。通过这些...

    Oracle中SQL语句执行效率的查找与解决

    本文将深入探讨Oracle中SQL语句执行效率的查找与解决方法,特别关注于如何识别和优化那些导致性能瓶颈的查询。 ### Oracle SQL执行效率:查找与解决 #### 一、资源消耗分析 在Oracle中,SQL语句执行效率低下通常...

    在VB中利用OO4O技术操作Oracle中大对象.pdf

    在VB中利用OO4O技术操作Oracle中大对象,是一种高效的方法,适用于处理存储在Oracle数据库中的大型数据,如图形、声音文件和格式化的文本文件等。这些大对象在Oracle中以两种形式存储:二进制流(如Long Row,BLOB)...

    Oracle中对LOB对象的操作.pdf

    Oracle数据库中的LOB(Large Object)数据类型用于存储非结构化数据,如文本、图像、音频和视频等。这种数据类型提供了高效、快速且灵活的数据访问方式。在Oracle中,LOB分为四种类型:BLOB、CLOB、NCLOB和BFILE。 ...

    Oracle的全文检索技术

    然而,一个明显的不足是,Oracle Text在处理中文内容的文本文档(如TXT、RTF)时,无论使用何种过滤器(INSO_FILTER或NULL_FILTER)或词法分析器(BASIC_LEXER、CHINESE_VGRAM_LEXER或CHINESE_LEXER),都无法正确...

    运用Java如何存取Oracle中的CLOB类型字段

    在示例中,通过`(OracleResultSet)rss.getCLOB(1)`获取CLOB对象,这一步骤要求确保`ResultSet`是Oracle特定的实现。一旦获取了CLOB对象,可以使用`CLOB.getSubString()`或`CLOB.getAsciiStream()`等方法读取数据。 ...

    Oracle导出Clob,Blob工具

    在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...

    oracle全文检索.pdf

    - **Microsoft Word 文档**:允许用户检索存储在 Microsoft Word 文件中的文本内容。 - **PDF 文件**:支持 PDF 文件的文本检索。 - **XML 文件**:提供对 XML 格式文档的检索功能。 此外,Oracle Text 还支持多种...

    oracle查找显示多个学生

    在Oracle数据库中查找并显示多个学生的记录通常涉及到SQL查询语句的编写。为了更具体地了解如何实现这一功能,我们需要考虑以下几个方面: 1. **表结构**:首先需要明确存储学生信息的表的结构,包括字段名称和数据...

    oracle对大对象类型操作:blob,clob,nclob,bfile

    在Oracle中,可以使用DBMS_LOB包来操作CLOB,如读取、写入、截断和比较文本。 3. NCLOB(National Character Large Object): NCLOB与CLOB类似,但用于存储Unicode字符集(如UTF-8或UTF-16)的大型文本数据。这样...

    oracle文本教程.rar

    Oracle中的对象包括表、视图、索引、存储过程、函数、触发器等。表是数据的主要存储结构,视图是虚拟表,基于查询结果。索引能加速查询速度,存储过程和函数是可重复使用的代码单元,提供业务逻辑封装。触发器则在...

    在ORACLE数据库中如何对多媒体数据对象进行处理.pdf

    Oracle InterMedia是Oracle 8系列数据库中的一个组件,专为处理图像、声音、视频动画和文本等多媒体内容而设计。在Oracle 9i及更高版本中,Oracle的多媒体功能进一步增强,提供了一套全面的管理工具,允许用户安全地...

    Oracle照片导出

    Blob(Binary Large Object)是Oracle数据库用于存储大对象,如图像、音频或视频文件等非结构化数据的数据类型。这个工具的目的是帮助用户方便地从特定的表和字段中提取这些照片,支持根据条件进行筛选,极大地简化...

    详解Oracle数据库中文全文索引.docx

    Oracle数据库中文全文索引是Oracle数据库的一种功能强大的文本检索技术,通过使用Oracle Text,使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被...

    管理oracle对象.pptx

    在Oracle数据库管理中,对象的管理和操作是核心任务之一。本章主要探讨了如何管理和操作Oracle数据库中的对象,特别是表格这一基本的数据库元素。Oracle表格是数据存储的基础,根据存储方式的不同,可分为普通表、...

    图片存入Oracle中,用clob和blob两种方式

    Oracle数据库系统支持这两种数据类型,用于存储大量文本数据和二进制数据。下面将详细介绍这两种数据类型以及如何在Oracle中使用它们存储和读取图片。 1. **CLOB数据类型**: `CLOB`数据类型用于存储大量的字符...

    基于Oracle的文献资料库全文检索技术

    Oracle Text(在Oracle 8i中称为InterMedia文本)是Oracle提供的一种强大的服务集合,它为文档提供了全面的支持,包括索引方法、检索、格式转换、存储和管理等功能。Oracle Text能够支持多种文本格式(如TXT、HTML)...

    oracle获取汉字拼音和拼音首字母的功能函数

    在Oracle数据库中,处理汉字和拼音的场景时,有时我们需要获取汉字的拼音或者拼音首字母。这在构建中文搜索引擎、数据分析或报表展示等场景中非常有用。Oracle提供了一些内置的功能函数,可以用来实现这些需求。以下...

    Oracle_XML开发手册

    结构索引用于快速查找XML文档的特定结构,路径索引则基于XPath表达式来定位数据。 3. **XML查询**: Oracle SQL支持对XML数据的查询,通过使用XMLTable函数,可以将XML文档中的元素转换为关系表,然后使用SQL查询。...

Global site tag (gtag.js) - Google Analytics