名站网址导航为大家提供关于数据库教程相关的教程网站知识。
1.了解oracle外部表Oracle 10G:PL/SQL正规表达式(正则表达式)手册
Oracle 的正规表达式的实施是以各种 SQL 函数和一个 WhERE 子句操作办法符的形式出现的。假如如果您不熟悉正规表达式,那么这篇文章可以让您了解一下这种新的极其强大然而表面上有点神秘的功能。已经对正,什么是正规表达式? 正规表达式由一个或多个字符型文字和/或元字符组成。在最简单的格式下,正规表达式仅由字符文字组成,如正规表达式 cat。它被读作字母 c,接着是字母 a 和 t,这种模式匹配 c, 验证数据、识别重复关键字的出现、检测不必要的空格,或分析字符串只是正规表达式的许多应用中的一部分。您可以用它们来验证电话号码、邮政编码、电子邮件地址、社会安全号码、IP 地址、网站网站文件名和路径名等的格,用 Oracle Database 10g 使用正规表达式 您可以使用最新引进的 Oracle SQL REGEXP_LIKE 操作办法符和 REGEXP_INSTR、REGEXP_SUBSTR 以及,正规表达式的基本例子 在使用这个新功能之前,您需要了解一些元字符的含义。句号 (.) 匹配一个正规表达式中的任意字符(除了换行符)。例如,正规表达式 a.b 匹配的字符串中首先包含字母 a,接着是, 默认情况下,一个正规表达式中的一个单独的字符或字符列表只匹配一次。为了指示在一个正规表达式中多次出现的一个字符,您可以使用一个量词,它也被称为重复操作办法符。.假如如果您想要得到从字母 a 开始并以字母 , 表 2 给出了重复操作办法符的完整列表。注意它包含了特殊的重复选项,它们实现了比现有的 LIKE 通配符更大的灵活性。假如如果您用圆括号括住一个表达式,这将有效地创建一个可以重复一定次数的子表达式。例如,, Oracle 的正规表达式实施支持 POSIX (可移植操作办法系统接口)字符类,参见表 3 中列出的内容。这意味着您要查找的字符类型可以非常特别。假设您要编写一条仅查找非字母字符的 LIKE 条件 , POSIX 字符类必须包含在一个由方括号 ([]) 指示的字符列表中。例如,正规表达式 [[:lower:]] 匹配一个小写字母字符,而 [[:lower:]]{5} 匹配五个连续的小写字母字符。, 除 POSIX 字符类之外,您可以将单独的字符放在一个字符列表中。例如,正规表达式 ^ab[cd]ef$ 匹配字符串 abcef 和 abdef。必须选择 c 或 d。, 除脱字符 (^) 和连字符 (-) 之外,字符列表中的大多数元字符被认为是文字。正规表达式看起来很复杂,这是因为一些元字符具有随上下文环境而定的多重含义。^ 就是这样一种元字符。假如如果您用它作为一个, 之前的一个例子介绍了使用圆括号来创建一个子表达式;它们允许您通过输入更替元字符来输入可更替的选项,这些元字符由竖线 (|) 分开。, 例如,正规表达式 t(a|e|i)n 允许字母 t 和 n 之间的三种可能的字符更替。匹配模式包括如 tan、ten、tin 和 Pakistan 之类的字,但不包括 teen、mountain ,REGEXP_LIKE 操作办法符 REGEXP_LIKE 操作办法符向您介绍在 Oracle 网站数据库中使用时的正规表达式功能。表 5 列出了 REGEXP_LIKE 的语法。, 下面的 SQL 查询的 WhERE 子句显示了 REGEXP_LIKE 操作办法符,它在 ZIP 列中搜索满足正规表达式 [^[:digit:]] 的模式。它将检索 ZIPCODE 表中的那些 ZIP,SELECT zip FROM zipcode WhERE REGEXP_LIKE(zip, '[^[:digit:]]'),ZIP ----- ab123 123xy 007ab abcxy, 这个正规表达式的例子仅由元字符组成,更具体来讲是被冒号和方括号分隔的 POSIX 字符类 digit。第二组方括号(如 [^[:digit:]] 中所示)包括了一个字符类列表。如前文所述,需要这样,REGEXP_INSTR 函数 这个函数返回一个模式的起始位置,因此它的功能非常类似于 INSTR 函数。新的 REGEXP_INSTR 函数的语法在表 6 中给出。这两个函数之间的主要区别是,R,SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234', '[[:digit:]]{5}$') AS rx_in,RX_INSTR ---------- 45,编写更复杂的模式 让咱们在前一个例子的邮政编码模式上展开,以便包含一个可选的四位数字模式。您的模式现在可能看起来像这样:[[:digit:]]{5}(-[[:digit:]]{4})?$。假如如果您的,SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234-1234', ' [[:digit:]]{5}(-[[:d,STARTS_AT ---------- 44, 在这个示例中,括弧里的子表达式 (-[[:digit:]]{4}) 将按 ? 重复操作办法符的指示重复零次或一次。此外,企图用传统的 SQL 函数来实现相同的结果甚至对 SQL 专家也是一个挑战。为了,REGEXP_SUBSTR 函数 类似于 SUBSTR 函数的 REGEXP_SUBSTR 函数用来提取一个字符串的一部分。表 8 显示了这个新函数的语法。在下面的示例中,匹配模式 [^,]* 的,SELECT REGEXP_SUBSTR('first field, second field , third field', ', [^,]*,') FROM dual,REGEXP_SUBSTR('FIR ------------------ , second field ,,REGEXP_REPLACE 函数 让咱们首先看一下传统的 REPLACE SQL 函数,它把一个字符串用另一个字符串来替换。假设您的数据在正文中有不必要的空格,您希望用单个空格来替换它们。利用 ,SELECT REPLACE('Joe Smith',' ', ' ') AS replace FROM dual,REPLACE --------- Joe Smith, REGEXP_REPLACE 函数把替换功能向前推进了一步,其语法在表 9 中列出。以下查询用单个空格替换了任意两个或更多的空格。( ) 子表达式包含了单个空格,它可以按 {2,} 的指示重复两次,RX_REPLACE ---------- Joe Smith,后向引用 正则表达式的一个有用的特性是能够存储子表达式供以后重用;这也被称为后向引用(在表 10 中对其进行了概述)。它允许复杂的替换功能,如在新的位置上交换模式或显示重复出现的单词或字母。子表达, 接下来的例子显示了通过按编号引用各个子表达式将姓名 Ellen hildi Smith 转变为 Smith, Ellen hildi。,SELECT REGEXP_REPLACE( 'Ellen hildi Smith', '(.*) (.*) (.*)', '\3, \1 \2') FROM dual,REGEXP_REPLACE('EL ------------------ Smith, Ellen hildi, 该 SQL 数据库语句显示了用圆括号括住的三个单独的子表达式。每一个单独的子表达式包含一个匹配元字符 (.),并紧跟着 * 元字符,表示任何字符(除换行符之外)都必须匹配零次或更多次。空格将各个子表达式, 后向引用对替换、格式化和代替值非常有用,并且您可以用它们来查找相邻出现的值。接下来的例子显示了使用 REGEP_SUBSTR 函数来查找任意被空格隔开的重复出现的字母数字值。显示的结果给出了识别重,SUBSTR ------ is is,匹配参数选项 您可能已经注意到了正则表达式操作办法符和函数包含一个可选的匹配参数。这个参数控制是否区分大小写、换行符的匹配和保留多行输入。,正则表达式的实际应用 您不仅可以在队列中使用正则表达式,还可以在使用 SQL 操作办法符或函数的任何地方(比如说在 PL/SQL 语言中)使用正则表达式。您可以编写利用正则表达式功能的触发器,以验证、, 接下来的例子演示了您如何能够在一次列检查约束条件中应用 REGEXP_LIKE 操作办法符来进行数据验证。它在插入或更新时检验正确的社会保险号码格式。如 123-45-6789 和 123456789,ALTER TABLE students ADD CONSTRAINT stud_ssn_ck ChECK (REGEXP_LIKE(ssn, '^([[:digit:]]{3}-[[:digit:], 由 ^ 和 $ 指示的开头或结尾的字符都是不可接受的。确保您的正则表达式没有分成多行或包含任何不必要的空格,除非您希望格式如此并相应地进行匹配。表 12 说明了该正则表达式示例的各个组成部分。,将正则表达式与现有的功能进行比较 正则表达式有几个优点优于常见的 LIKE 操作办法符和 INSTR、SUBSTR 及 REPLACE 函数的。这些传统的 SQL 函数不便于进行模式匹配。只有 LIK,实实在在地丰富您的相关工具包 因为正则表达式有助于解决复杂的问题,所以它们是非常强大的。正则表达式的一些功能难于用传统的 SQL 函数来仿效。当您了解了这种稍显神秘的语言的基础构建程序块时,正则表达式,表 2:量词或重复操作办法符 量词 说明 * 匹配 0 次或更多次 ? 匹配 0 次或 1 次 匹配 1 次或更多次 {m} 正好匹配 m 次 {m,} 至少匹配 m 次 {m, n} 至少匹配 m ,表 3:预定义的 POSIX 字符类 字符类 说明 [:alpha:] 字母字符 [:lower:] 小写字母字符 [:upper:] 大写字母字符 [:digit:] 数字 [:alnum:] 字母,表 4:表达式的替换匹配和分组 元字符 说明 | 替换 分隔替换选项,通常与分组操作办法符 () 一起使用 ( ) 分组 将子表达式分组为一个替换单元、量词单元或后向引用单元(参见“后向引用”部分) [c,表 5:REGEXP_LIKE 操作办法符 语法 说明 REGEXP_LIKE(source_string, pattern [, match_parameter]) source_string 支持字符,表 6:REGEXP_INSTR 函数 语法 说明 REGEXP_INSTR(source_string, pattern [, start_position [, occurrence [, ret,表 7: 5 位数字加 4 位邮政编码表达式的说明 语法 说明 必须匹配的空白 [:digit:] POSIX 数字类 ] 字符列表的结尾 {5} 字符列表正好重复出现 5 次 ( 子表达式的开头 -,表 8:REGEXP_SUBSTR 函数 语法 说明 REGEXP_SUBSTR(source_string, pattern [, position [, occurrence [, match_p,表 9: REGEXP_REPLACE 函数 语法 说明 REGEXP_REPLACE(source_string, pattern [, replace_string [, position [,o,表 10:后向引用元字符 元字符 说明 \digit 反斜线 紧跟着一个 1 到 9 之间的数字,反斜线匹配之前的用括号括起来的第 digit 个子表达式。 (注意:反斜线在正则表达式中有另一种意义,,表 11:模式交换正则表达式的说明 正则表达式项目 说明 ( 第一个子表达式的开头 . 匹配除换行符之外的任意单字符 * 重复操作办法符,匹配之前的 . 元字符 0 到 n 次 ) 第一个子表达式的结尾;,表 12:社会保险号码正则表达式的说明 正则表达式项目 说明 ^ 行首字符(正则表达式在匹配之前不能有任何前导字符。) ( 开始子表达式并列出用 | 元字符分开的可替换选项 [ 字符列表的开头 [:d
外部表定义:结构被存放在数据字典,而表数据被放在OS网站网站文件中的表
作用:在网站数据库中查询OS网站网站文件的数据,还可以将OS网站网站文件数据装载到网站数据库中
与其它表的区别:在外部表上不能执行DML操作办法,也不能在外部表上建索引,只能执行select操用
2.建一个简单的外部表1.建一个OS上的网站网站文件
因为外部表主要是查看OS上的网站网站文件,首先在OS上建一个网站网站文件
mkdir -p /oracle/ext
vi /oracle/ext/ext.dat
10,20,30
40,50,60
70,80,90
2.授予用户权限,并建立目录对象
在此咱们先建一个新用户
create user test identified by “123” default tablespace test quota unlimited on test;
用户授权
SQL> grant create any directory to test;
建立目录对象
SQL> conn test / 123
Connected.
SQL> create directory ext as '/oracle/ext';
Directory created.
3.建立外部表
SQL> create table exttable(
id number,name varchar2(10),i number
)organization external
(type oracle_loader
default directory ext
access parameters
(records delimited by newline
fields terminated by ','
)location('ext.dat')
);
4.测试
SQL> select * from exttable;
ID NAME I
---------- ---------- ----------
10 20 30
40 50 60
70 80 90
测试成功,可见在网站数据库中可以查询OS网站网站文件的数据