--T2?000条记?br />create table T2 as select rownum id, a.* from all_objects a where 1=0; //T2表的字段和all_objects表字D늱型以及默认g_但烦引初始化了,需要重新设|?br /> --创徏主键ID,向T2表copy数据 alter table T2 add constraint T2_PK_ID primary key (ID); insert into T2 select rownum id, a.* from all_objects a where rownum<=5000; --T1?0000条记?nbsp; create table T1 as select rownum sid, T2.* from T2 where 1=0;
-- 创徏外键ID,向T1表copy数据 alter table T1 add constraint T1_FK_ID foreign key (ID) references t2 (ID); insert into T1 select rownum sid, T2.* from T2; insert into T1 select rownum sid, T2.* from T2;
--更新Subobject_Name字段Q初始ؓNULL update T2 set T2.Subobject_Name='StevenHuang'
]]>PL/SQL中SELECT INTO无记录的情况http://www.aygfsteel.com/hwpok/archive/2012/12/25/393477.html惠万?/dc:creator>惠万?/author>Tue, 25 Dec 2012 11:40:00 GMThttp://www.aygfsteel.com/hwpok/archive/2012/12/25/393477.htmlhttp://www.aygfsteel.com/hwpok/comments/393477.htmlhttp://www.aygfsteel.com/hwpok/archive/2012/12/25/393477.html#Feedback0http://www.aygfsteel.com/hwpok/comments/commentRss/393477.htmlhttp://www.aygfsteel.com/hwpok/services/trackbacks/393477.htmlSELECT AMOUNT INTO l_Amount FROM T1 WHERE... 条g比较长,省略。可以保证最多只有一条相W结果? 无记录的时候,xl_Amount设ؓ0?
Z应付无记录的情况Q想了以下这些写法:
W?U,先检查g敎ͼ SELECT COUNT(*) INTO l_Cnt 以下省略 IF l_Cnt > 0 THEN SELECT AMOUNT INTO l_Amount 以下省略 END IF;
W?U,用exceptionQ? FUNCTION GETAMOUNT RETURN NUMBER IS l_Ret BEGIN SELECT AMOUNT INTO l_Ret 以下省略 RETURN l_Ret WHEN NO_DATA_FOUND THEN RETURN 0 END;
W?U,用UNIONQ? SELECT AMOUNT INTO l_Amount FROM ( SELECT AMOUNT FROM T1 WHERE... UNION ALL SELECT 0 FROM DUAL ) WHERE rownum <=1;
W?U,用NVL函数Q? SELECT NVL(MAX(AMOUNT), 0)因ؓ最多就一条记录,MAX,MIN之类的函数都可以 INTO l_Amount FROM T1 WHERE...
]]>PowerDesigner讄http://www.aygfsteel.com/hwpok/archive/2012/01/11/368323.html惠万?/dc:creator>惠万?/author>Wed, 11 Jan 2012 07:32:00 GMThttp://www.aygfsteel.com/hwpok/archive/2012/01/11/368323.htmlhttp://www.aygfsteel.com/hwpok/comments/368323.htmlhttp://www.aygfsteel.com/hwpok/archive/2012/01/11/368323.html#Feedback0http://www.aygfsteel.com/hwpok/comments/commentRss/368323.htmlhttp://www.aygfsteel.com/hwpok/services/trackbacks/368323.htmlsql语句中表名与字段名前的引号去除:
打开cdm的情况下Q进入ToolsQModel OptionsQNaming ConventionQ把Name和Code的标{Charcter case选项讄成Uppercase或者LowercaseQ只要不是Mixed CasepQ?br />或者选择Database->Edit current database->Script->Sql->FormatQ有一CaseSensitivityUsingQuoteQ它?comment?#8220;Determines if the case sensitivity for identifiers is managed using double quotes”Q表C是否适用双引h规定标识W的大小写, 可以看到双的values默认gؓ“YES”,改ؓ“No”卛_Q?br />或者在打开pdm的情况下Q进入ToolsQModel OptionsQNaming ConventionQ把Name和Code的标{Charcter case选项讄成Uppercase可以!
在修改name的时候,code的值将跟着变动Q很不方?/strong>
修改ҎQPowerDesign中的选项菜单里修改,在[Tool]-->[General Options]->[Dialog]->[Operating modes]->[Name to Code mirroring],q里默认是让名称和代码同步,前面的复选框Lp了?br />
由pdm生成脚本Ӟ字段过15字符发生错误(oracleQ?/strong>
原因未知Q解军_法是打开PDM后,会出现Database的菜单栏Q进入Database Q?Edit Current DBMS QscriptQobjectsQcolumnQmaxlenQ把valueD?原ؓ30)Q比如改?0。出现表或者其它对象的长度也有q种错误的话都可以选择对应的objects照此U方法更改! 或者用下面的q种ҎQ?br /> 生成脚本时会弹出Database generation提示框:把options Q?check model的小勄LQ就是不q行查(不推荐)Q?br /> 或者可以修改C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\DBMS\oracl9i2.xdb文g 修改好后Q再cdm转ؓpdmӞ选择“Copy the DBMS definition in model”把把q个资源文g拯到模型中?br />
由CDM生成PDMӞ自动生成的外键的重命?/strong>
PDM Generation Options->Detail->FK index names默认?REFR%_FKQ改为FK_%REFRCODE%Q其?REFRCODE%指的是CDM中Relationship的codeQ另外自动生成的父字D늚规则是PDM Generation Options->Detail->FK column name template中设|的Q默认是%.3:PARENT%_%COLUMN%Q可以改为Par%COLUMN%表示是父字段Q?br />
建立一个表?Z出现Existence of index的警?/strong> A table should contain at least one column, one index, one key, and one reference. 可以不检?Existence of index q项Q也没有这个警告错误了Q?br />意思是说没有给表徏立烦引,而一个表一般至要有一个烦引,q是一个警告,不用也没有关系Q?br />
'****************************************************************************** '* File: name2comment.vbs '* Purpose: Database generation cannot use object names anymore ' in version 7 and above. ' It always uses the object codes. ' ' In case the object codes are not aligned with your ' object names in your model, this script will copy ' the object Name onto the object comment for ' the Tables and Columns. ' '* Title: 把对象name拷入comment属性中 '* Version: 1.0 '* AuthorQ?br />'* 执行ҎQPD11 -- Open PDM -- Tools -- Execute Commands -- Run Script '******************************************************************************
' get the current active model Set mdl = ActiveModel If (mdl Is Nothing) Then MsgBox "There is no current Model" ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then MsgBox "The current model is not an Physical Data model." Else ProcessFolder mdl End If
' This routine copy name into code for each table, each column and each view ' of the current folder Private sub ProcessFolder(folder) Dim Tab 'running table for each Tab in folder.tables if not tab.isShortcut then tab.comment = tab.name Dim col ' running column for each col in tab.columns col.comment= col.name next end if next
Dim view 'running view for each view in folder.Views if not view.isShortcut then view.comment = view.name end if next
' go into the sub-packages Dim f ' running folder For Each f In folder.Packages if not f.IsShortcut then ProcessFolder f end if Next end sub
PowerDesigner 生成SQL的Existence of refernce错误问题 现象Q用PowerDesigner生成SQL语句Ӟ提示Existence of refernce错误?br />原因Q该表没有与其他表的兌(如外键等Q,而PowerDesigner需要存在一个refernce才能生成SQL. 解决ҎQ?br /> 在工hI白处右键打开Palette面板Q选中Link/Extended Dependency 按钮Q然后在提示出错的表上添加到自己的Dependency?br /> 重新生成SQL,你将发现刚才提示的错误没有了Q问题解冟?br /> 利用PowerDesigner扚w生成试数据 主要解决Ҏ: A:在PowerDesigner B:然后l每一个表的字D徏立相应的摘要文g 步骤如下: Model->Test Data Profiles配置每一个字D|要文件General:输入Name、Code?br />选择Class(数字、字W、时?cd 选择Generation SourceQ?Automatic、List、ODBC、File Detail:配置字段相关信息 所有字D|要文仉|完成后双击该表->选择字段->Detail->选择Test Data Parameters 摘要文g如果字段g其它字段有关pd: Computed Expression 中输入计列--生成试数据: DataBase->Generation Test Data-> 选择:Genration cd(Sript、ODBC) Selection(选择要生成的? Test Data Genration(Default number of rows 生成记录行数)
]]>SQLPLUS SPOOL命o使用http://www.aygfsteel.com/hwpok/archive/2012/01/05/367972.html惠万?/dc:creator>惠万?/author>Thu, 05 Jan 2012 15:24:00 GMThttp://www.aygfsteel.com/hwpok/archive/2012/01/05/367972.htmlhttp://www.aygfsteel.com/hwpok/comments/367972.htmlhttp://www.aygfsteel.com/hwpok/archive/2012/01/05/367972.html#Feedback0http://www.aygfsteel.com/hwpok/comments/commentRss/367972.htmlhttp://www.aygfsteel.com/hwpok/services/trackbacks/367972.htmlSPOOL?/span>SQLPLUS的命?必须在SQLPLUS中用,主要完成以标准输出方式输出SQLPLUS的命令及执行l果Q一般常用户格式化导出ORACLE表数据?br />
对于SPOOL数据?/span>SQLQ最好要自己定义格式Q以方便E序直接导入,SQL语句如: select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from sys_user;
spool常用的设|?/span>
set colsep' '; //域输出分隔符
set echo off;//昄start启动的脚本中的每?/span>sql命oQ缺省ؓon
set feedback off;//回显本次sql命o处理的记录条敎ͼ~省?/span>on
set heading off; //输出域标题,~省?/span>on
set pagesize 0;//输出每页行数Q缺省ؓ24,Z避免分页Q可讑֮?/span>0?/span>
set termout off; //昄脚本中的命o的执行结果,~省?/span>on
set trimout on;//去除标准输出每行的拖|~省?/span>off
set trimspool on;//去除重定向(spoolQ输出每行的拖尾I格Q缺省ؓoff
sqlplus -s username/password@sid set trimspool on; set linesize 120; set pagesize 2000; set newpage 1; set heading off; set term off; spool sys_user.txt; select col1||','||col2||','||col3||','||col4||'..'from sys_user; spool off; exit;
SQL> show parameters spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string E:/ORACLE/PRODUCT/10.2.0/DB_1/DBS/SPFILESQDSS.ORA
SQL> show parameters pfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string E:/ORACLE/PRODUCT/10.2.0/DB_1/DBS/SPFILESQDSS.ORA
-- ?开?----------------------------------------------------- DECLARE n NUMBER := 1; BEGIN DBMS_OUTPUT.put_line('W??||n); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line('W?块异?------'); END; -- ?l束------------------------------------------------------
-- ?开?----------------------------------------------------- DECLARE m NUMBER := 2; BEGIN DBMS_OUTPUT.put_line('W??||m); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line('W?块异?------'); END; -- ?l束------------------------------------------------------ EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line('收到全局-------'); END;
表已创徏?br /> SQL> create or replace procedure proc_sch(arg_1 in number , 2 arg_2 in varchar2) 3 is 4 begin 5 insert into sch_demo_log values(arg_1,arg_2,sysdate); 6 commit; 7 end; 8 /
q程已创建?br />W二步:创徏一个调度程序ƈ讄对应procedure中参数的default value
SQL> begin 2 DBMS_SCHEDULER.CREATE_PROGRAM( 3 program_name => 'TEST_PROG', 4 program_action => 'PROC_SCH', 5 program_type => 'STORED_PROCEDURE', 6 number_of_arguments => 2, 7 comments => 'sch test by STORED_PROCEDURE with argument', 8 enabled => false); 9 end; 10 /
PL/SQL q程已成功完成?br /> SQL> select * from sch_demo_log;
ARG_1 ARG_2 DEAL_DATE ---------- ------------------------ ------------------- 100 Thomaszhang Test 2007-11-12 14:35:59 200 set new value first 2007-11-12 14:37:59可以看到Q这个时候,记录的日志变成了新的参数。这个demo 说明Q根据我们的需要,可以讄不同的运行期参数。SQL> begin 2 DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( 3 job_name => 'TEST_JOB', 4 argument_position => 1, 5 argument_value => 300); 6 7 DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( 8 job_name => 'TEST_JOB', 9 argument_position => 2, 10 argument_value => 'set new value second'); 11 end; 12 /
PL/SQL q程已成功完成。再换一个看看:
SQL> select * from sch_demo_log;
ARG_1 ARG_2 DEAL_DATE ---------- ----------------------- ------------------- 100 Thomaszhang Test 2007-11-12 14:35:59 200 set new value first 2007-11-12 14:37:59 300 set new value second 2007-11-12 14:39:59 清除通过set_job_argument_value讄的参敎ͼSQL> begin 2 DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',1); 3 DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',2); 4 end; 5 /
PL/SQL q程已成功完成?br /> SQL> select * from sch_demo_log;
ARG_1 ARG_2 DEAL_DATE ---------- ------------------------ ------------------- 100 Thomaszhang Test 2007-11-12 14:35:59 200 set new value first 2007-11-12 14:37:59 300 set new value second 2007-11-12 14:39:59 100 Thomaszhang Test 2007-11-12 14:41:59可以看到又恢复到了我们前面定义的默认倹{这个|可以通过dba_scheduler_program_args视图看到。SQL> begin 2 DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( 3 job_name => 'TEST_JOB', 4 argument_position => 1, 5 argument_value => 400); 6 7 DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( 8 job_name => 'TEST_JOB', 9 argument_position => 2, 10 argument_value => 'set new value third'); 11 end; 12 /
PL/SQL q程已成功完成?br /> SQL> select * from sch_demo_log;
ARG_1 ARG_2 DEAL_DATE ---------- ---------------------- ------------------- 100 Thomaszhang Test 2007-11-12 14:35:59 200 set new value first 2007-11-12 14:37:59 300 set new value second 2007-11-12 14:39:59 100 Thomaszhang Test 2007-11-12 14:41:59 400 set new value third 2007-11-12 14:43:59
SQL> begin 2 DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',1); 3 DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',2); 4 end; 5 /
PL/SQL q程已成功完成?br /> SQL> select * from sch_demo_log;
ARG_1 ARG_2 DEAL_DATE ---------- ----------------------- ------------------- 100 Thomaszhang Test 2007-11-12 14:35:59 200 set new value first 2007-11-12 14:37:59 300 set new value second 2007-11-12 14:39:59 100 Thomaszhang Test 2007-11-12 14:41:59 400 set new value third 2007-11-12 14:43:59 100 Thomaszhang Test 2007-11-12 14:45:59
]]>oracle row_number over http://www.aygfsteel.com/hwpok/archive/2011/08/25/357258.html惠万?/dc:creator>惠万?/author>Thu, 25 Aug 2011 06:08:00 GMThttp://www.aygfsteel.com/hwpok/archive/2011/08/25/357258.htmlhttp://www.aygfsteel.com/hwpok/comments/357258.htmlhttp://www.aygfsteel.com/hwpok/archive/2011/08/25/357258.html#Feedback0http://www.aygfsteel.com/hwpok/comments/commentRss/357258.htmlhttp://www.aygfsteel.com/hwpok/services/trackbacks/357258.html1.先创
createtable employee (empid int ,deptid int ,salary decimal(10,2));
输入字符串ؓQCharacters in Sienfeld incl? Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza能够匚w它们的姓名,q在一个组llastName中捕获姓的正则表辑ּ为:\b[A-Z][a-z]+ (?<lastName>[A-Z][a-z]+)\b
它生了4ơ匹配:First Match=Jerry Seinfeld; Second Match=Elaine Benes; Third Match=Cosmo Kramer; Fourth Match=George Costanza
每一ơ匹配都对应了一个lastNamel:
W?ơ匹配:lastName group=Seinfeld
W?ơ匹配:lastName group=Benes
W?ơ匹配:lastName group=Kramer
W?ơ匹配:lastName group=Costanza
不管是否讄了选项ExplictCaptureQ组都将被捕?/p>
Q?=Q?/p>
正声明。声明的右侧必须是括号中指定的模式。此模式不构成最l匹配的一部分
正则表达式\S+(?=.NET)要匹配的输入字符串ؓQThe lang ges were Java,C#.NET,VB.NET,C,Jscript.NET,Pascal
生如下匹配:?/p>
C#
VB
JScript.
Q?!Q?/p>
负声明。它规定模式不能紧着声明的右侧。此模式不构成最l匹配的一部分
\d{3}(?![A-Z])要匹配的输入字符串ؓQ?23A 456 789111C
生如下匹配:
456
789
Q?<=Q?/p>
反向正声明。声明的左侧必须为括号内的指定模式。此模式不构成最l匹配的一部分
正则表达??<=New)([A-Z][a-z]+)要匹配的输入字符串ؓQThe following states,New Mexico,West Virginia,Washington, New England
insert into test vals('112233445566778899'); insert into test vals('22113344 5566778899'); insert into testvals('33112244 5566778899'); insert into test vals('44112233 5566 778899'); insert into test vals('5511 2233 4466778899'); insert into test vals('661122334455778899'); insert into test vals('771122334455668899'); insert into test vals('881122334455667799'); insert into test vals('991122334455667788'); insert into test vals('aabbccddee'); insert into test vals('bbaaaccddee'); insert into test vals('ccabbddee'); insert into test vals('ddaabbccee'); insert into test vals('eeaabbccdd'); insert into test vals('ab123'); insert into test vals('123xy'); insert into test vals('007ab'); insert into test vals('abcxy'); insert into test vals('The final test is is is how to find duplicate words.');
commit;
一、REGEXP_LIKE
select * from test where regexp_like(mc,'^a{1,3}'); select * from test where regexp_like(mc,'a{1,3}'); select * from test where regexp_like(mc,'^a.*e$'); select * from test where regexp_like(mc,'^[[:lower:]] |[[:digit:]]'); select * from test where regexp_like(mc,'^[[:lower:]]'); Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]'); Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');
二、REGEXP_INSTR
Select REGEXP_INSTR(mc,'[[:digit:]]$') from test; Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test; Select REGEXP_INSTR('The price is $400.','$[[:digit:]]+') FROM D L; Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM D L; Select REGEXP_INSTR(',,,,,','[^,]*') FROM D L; Select REGEXP_INSTR(',,,,,','[^,]') FROM D L;
三、REGEXP_S STR
SELECT REGEXP_S STR(mc,'[a-z]+') FROM test; SELECT REGEXP_S STR(mc,'[0-9]+') FROM test; SELECT REGEXP_S STR('aababcde','^a.*b') FROM D L;
四、REGEXP_REPLACE
Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM d l; Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '3, 2, 1') FROM d lQ?/p>
IEEE Portable Operating System Interface (POSIX) standard draft 1003.2/D11.2
Unicode Regular Expression Guidelines of the Unicode Consortium
Extends the matching capabilities for multilingual data beyond what is specified in the POSIX standard(即posix的多语言支持).
Adds support for the common Perl regular expression extensions that are not
included in the POSIX standard but do not conflict with it. Oracle Database
provides built-in support for some of the most heavily used Perl regular expression operators, for example, character class shortcuts, the non-greedy modifier, and so on(即部分perl标准,不包含在posix标准,但是又不与之冲突?
---2008-09-08 做了个实验,关键的要Ҏ三个,重复ơ数{},+,*,? ---以及匚w模式[...] ,[^...],(...),(...) --以及转义W号 \d,\D,\\{?br />------------------------------------------------------------------------------------------------------------------ ID VALUE --------------------------------------- ---------------------------------------- 9 lzf is a chinese 10 1231231231lzf 11 perfect 1 13625061300 2 059183383335 3 13959029697 4 13950323157 5 who is your daddy? 6 who are you? 6 what is your name? 6 I am 20 years old! 7 股市下挫?100点左?br /> 8 lzf ' is very happy 136ok 8 do you know lzf,ok? 8 ok,lzf is my brother ------------------------------------------------------------------------------------------------------------------
select * from test_reg where regexp_like(value,'^1(.+)7$') --1开_7l尾的内?br />select * from test_reg where regexp_like(value,'\d+') --一个或者多个数?br />select * from test_reg where regexp_like(value,'^[a-zA-Z]{1,}[a-zA-Z]+$') --全部字符?[:digit:] select * from test_reg where regexp_like(value,'^[0-9]{1,}[0-9]+$') --全部数字? select * from test_reg where regexp_like(value,'[y][o][u]') --包含you select * from test_reg where regexp_like(value,'(you)') --包含you select * from test_reg where regexp_like(value,'[you]') --包含y o u?不分序 select * from test_reg where regexp_like(value,'(lzf){1,}(.){0,}(ok)') --包含lzf 和ok? 但是也仅仅限制与lzf 在ok?br />以上试验是在看了下文以及参考了OReilly.Oracle.PL.SQL.Programming.4th.Edition.Aug.2005.chs后作出的. -------------- 2010/08/04 增加以下例子
--- --?POSIX('开头的?以下几个表达式的l果都是一L?br />select 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+)(,)([RYN]{1})(,)\d{1,}?\)')
select 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+)(,)([RYN]{1})(,)\d+\)') select 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+)(,)([RYN]{1}),\d+\)') select 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+),([RYN]{1}),\d+\)') select 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+),([RYN]+),\d+\)')
select 1 from dual where regexp_like('POSIX(ADDDDDD,Y,13)','^(POSIX\()([A-Z]+),[RYN]+,\d+\)') select 1 from dual where regexp_like('POSIX(A,N,13)','^(POSIX\()([A-Z]+),[RYN]+,\d+\)') ---------- --位于字符串中的串 select 1 from dual where regexp_like('POSIX(A,N,13)','^(POSIX\()([A-Z]+),[RYN]+,\d+\)') select 1 from dual where regexp_like('P_OSI_X(JYL_GP_R,N,13)','^[A-Z_]+\(([A-Z_]+),[RYN]+,\d+\)')
--试regexp_substr,基本的还是regexp_like
SQL> select regexp_substr('P_OSI_X(JYL_GP_R,N,13)+AVG(JYL_JJ_R,Y,3)','^[A-Z_]+\(([A-Z_]+),[RYN]+,\d+\)') FROM DUAL 2 /
-- delete the first () select regexp_replace('dad(disc_id=50003118)add','(^([A-Z]{1,}\()|(\)[A-Z]{1,})$)','',1,0,'i') FROM DUAL -- match pattern using classes select regexp_substr(upper('dad(ssdsd89\9 dd== (sddf(d)),sdsd)add'),'^([A-Z]{1,}\()[[:space:][:alnum:]\,\_\(\)\=]{1,}\)[A-Z]{1,}$',1,1,'i') FROM DUAL
OReilly. 的参考内?/font> Section A.1. Metacharacters
A.1. Metacharacters
The R2 column in Tables A-1 through A-3 indicates which metacharacters were introduced in Oracle Database 10g Release 2. All others were introduced in Release 1.
Table A-1. Character-matching metacharacters
Syntax
R2?
Description
.
Matches any single character except for newline. Will match newline when the n flag is set. On Windows, Linux, and Unix platforms, chr(10) is recognized as the newline.
[ ... ]
Defines a matching list that matches any character listed between the brackets. You may specify ranges of characters, as in a-z. These ranges are interpreted based on the NLS_SORT setting.
A dash (-) is a literal when it occurs first or last in the list (e.g., [abc-]). A closing-bracket (]) is a literal when it occurs first in the list (e.g., []abc]). A caret (^) in the first position makes the list a nonmatching list (see the next entry).
[^ ... ]
Matches any character not listed between the brackets. Referred to as a "nonmatching list."
[:class:]
Matches any character that belongs to the specified character class. May only be used within a matching list: [[:class:]abc] is a valid expression, [:class:]abc is not. Table A-5 lists the valid character class names.
[.coll.]
Matches the specified collation element, which may be one or more characters. May only be used within a matching list. For example, the expression [[.ch.]] matches the Spanish letter "ch". Table A-4 lists the valid collation elements.
[=char=]
Matches all characters that share the same base character as char. May be used only within a matching list. For example, [[=e=]] matches any of: "eé?è???E".
\d
Matches any digit. Equivalent to [[:digit:]].
\D
Matches any nondigit. Equivalent to [^[:digit:]]
\w
Matches any "word character." Word characters are defined to be alphabetic characters, numeric characters, and the underscore.
\W
Matches any nonword character.
\s
Matches any whitespace character. Equivalent to [[:space:]].
\S
Matches nonwhitespace characters. Equivalent to [^[:space:]].
Table A-2. Quantifiers
Syntax
R2?
Description
+
One or more
?
Zero or one
*
Zero or more
{m}
Exactly m occurrences
{m,}
At least m occurrences
{m,n}
At least m, and at most n occurrences
+?
One or more, but nongreedy
??
Zero or one, but nongreedy
{m}?
The same as {m}
{m,}?
At least m occurrences, but nongreedy and stops as soon as m occurrences are reached
{m,n}?
At least m, and at most n occurrences, but nongreedy; when possible, m occurrences are matched
Table A-3. Other metacharacters
Syntax
R2?
Description
|
Specifies an alternation. An alternation within a subexpression doesn't extend beyond the subexpression.
( ...)
Defines a subexpresson.
\n
References the text matched by the nth subexpression. Backreferences may range from \1 through \9.
\
When not followed by a digit, the \ is an escape character. For example, use the pattern \\1 to look for a single backslash followed by the digit 1, use \( to look for an opening-parentheses (rather than begin a subexpression), etc.
^
Anchors an expression to the beginning of the string (in multiline mode, to the beginning of a line).
$
Anchors an expression to the end of the string (in multiline mode, to the end of a line).
\A
Anchors an expression to the beginning of the string regardless of whether multiline mode is specified.
\Z
Anchors an expression to the end of the string, or the a newline that happens to be ending a string, regardless of whether multiline mode is specified.
\z
Anchors an expression to the end of the string regardless of whether multiline mode is specified.
Table A-4. Collation elements
NLS_SORT
Multicharacter collation elements
XDANISH
aa
oe
AA
OE
Aa
Oe
XSPANISH
ch
ll
CH
LL
Ch
Ll
XHUNGARIAN
cs
gy
ly
ny
sz
ty
zs
CS
GY
LY
NY
SZ
TY
ZS
Cs
Gy
Ly
Ny
Sz
Ty
Zs
XCZECH
ch
CH
Ch
XCZECH_PUNCTUATION
ch
CH
Ch
XSLOVAK
dz
d_
ch
DZ
D_
CH
Dz
D_
Ch
XCROATIAN
d_
lj
nj
D_
LJ
Nj
D_
Lj
NJ
Table A-5. Supported character classes
Class
Description
[:alnum:]
Alphanumeric characters (same as [:alpha:] + [:digit:])
Whitespace characters such as space, formfeed, newline, carriage return, horizontal tab, and vertical tab
[:upper:]
Uppercase letters
[:xdigit:]
Hexadecimal characters
对于cȝ使用Q要特别注意点,因ؓ基本上要包含在一对中括号中?br />例一Q检验非汉字的函?/span> 例如可以定义一个检验非汉字的函敎ͼ不考虑其它UNICODE CREATE OR REPLACE Function func_existNormalChar(chars In Varchar2) Return Pls_Integer Is vResult Pls_Integer; Begin Select 1 Into vresult From dual Where regexp_like(chars,'[!-~ Q。、?’“Q:『』【】+Q-——~!◎QEQ?#8230;…※×Q)]+') Or regexp_like(chars,'[[:space:]+]') Or regexp_like(chars,'[[:blank:]+]') Or regexp_like(chars,'[[:cntrl:]+]'); Return vresult; Exception When Others Then Return 0; End;
select*from user_sys_privs t where t.privilege likeupper('%link%');
l果如下: 可以看出在数据库中dblink有三U权? 1).CREATE DATABASE LINKQ所创徏的dblink只能是创能使用Q别的用户用不了) 2).CREATE PUBLIC DATABASE LINKQpublic表示所创徏的dblink所有用户都可以使用Q?br /> 3).DROP PUBLIC DATABASE LINK
在sys用户下,把CREATE PUBLIC DATABASE LINKQDROP PUBLIC DATABASE LINK权限授予l你的用?/p>
grantCREATEPUBLICDATABASE LINKQ?/span>DROPPUBLICDATABASE LINK to scott;
]]>oracle 对象cd(? 单对?/title>http://www.aygfsteel.com/hwpok/archive/2011/07/14/354321.html惠万?/dc:creator>惠万?/author>Thu, 14 Jul 2011 06:17:00 GMThttp://www.aygfsteel.com/hwpok/archive/2011/07/14/354321.htmlhttp://www.aygfsteel.com/hwpok/comments/354321.htmlhttp://www.aygfsteel.com/hwpok/archive/2011/07/14/354321.html#Feedback0http://www.aygfsteel.com/hwpok/comments/commentRss/354321.htmlhttp://www.aygfsteel.com/hwpok/services/trackbacks/354321.html-- 建立对象cd CREATEORREPLACE TYPE person_type2 AS OBJECT ( ID NUMBER, NAME VARCHAR2(20), phone VARCHAR2(20), address VARCHAR2(64), CONSTRUCTOR FUNCTION person_type2 ( ID NUMBER, NAME VARCHAR2 ) RETURN SELF AS RESULT, MEMBER PROCEDURE change_address(addr VARCHAR2), MEMBER FUNCTION get_info RETURNVARCHAR2 );
-- 建立对象cd CREATEORREPLACE TYPE BODY person_type2 IS --构造方?/span> CONSTRUCTOR FUNCTION person_type2 ( ID NUMBER, NAME VARCHAR2 ) RETURN SELF AS RESULT IS BEGIN self.id:=ID; self.name:=NAME; RETURN; END;
-- 更改address的?/span> MEMBER PROCEDURE change_address(addr VARCHAR2) IS BEGIN address := addr; END;
-- q回信息 MEMBER FUNCTION get_info RETURNVARCHAR2 IS BEGIN RETURN'id:'||ID||',name:'||NAME||',phone:'||phone||',address:'||address; END; END;
DROPTABLE worker;
-- 创徏包含对象cd的表 CREATETABLE worker( ID NUMBERPRIMARYKEY, person person_type2, create_time DATE DEFAULT SYSDATE, remark VARCHAR2(256) )
-- 包规?/span> CREATEORREPLACE PACKAGE pkg_edm IS age NUMBER :=30; PROCEDURE add_test_hui( in_id INNUMBER, in_value INVARCHAR2); FUNCTION getValueById( in_id INNUMBER) RETURNVARCHAR2; END pkg_edm;
2.包体 相当于java里的接口实现c?
-- 包体 CREATEORREPLACE PACKAGE BODY pkg_edm IS -- 查询函数 FUNCTION getValueById( in_id INNUMBER) RETURNVARCHAR2 IS rtn_value VARCHAR2(64) :=''; BEGIN SELECT VALUE INTO rtn_value FROM test_hui WHERE ID=in_id; RETURN rtn_value; EXCEPTION WHEN OTHERS THEN RETURN rtn_value; END getValueById;
-- 插入记录q程 PROCEDURE add_test_hui( in_id INNUMBER, in_value INVARCHAR2) IS BEGIN INSERTINTO test_hui (ID,VALUE) VALUES(in_id,in_value); COMMIT; END add_test_hui; END pkg_edm;
包的调用: 1.试调用包过E?br />
--试调用包过E?/span> BEGIN pkg_edm.add_test_hui(99999,'asdfasdf'); END;
2.试调用包函?br />
--试调用包函?/span> DECLARE temp_value VARCHAR2(64); BEGIN temp_value := pkg_edm.getValueById(8713); dbms_output.put_line(temp_value); END;
DECLARE TYPE cur IS REF CURSOR; test_cur cur; t_record test_forall%ROWTYPE; BEGIN OPEN test_cur FORSELECT*FROM test_forall; LOOP FETCH test_cur INTO t_record; EXITWHEN test_cur%NOTFOUND; dbms_output.put_line(t_record.user_id); END LOOP; CLOSE test_cur; END;
DECLARE TYPE t_user_id ISTABLEOF test_forall.user_id%TYPE; t1 t_user_id; BEGIN t1 := t_user_id(1,2,3); FOR i IN1..t1.count LOOP dbms_output.put_line(t1(i)); END LOOP; END;
2.set 集合去重
DECLARE TYPE t_user_id ISTABLEOF test_forall.user_id%TYPE; t1 t_user_id; t2 t_user_id; BEGIN t1 := t_user_id(1,1,2,2,3,3); t2 :=SET(t1); FOR i IN1..t2.count LOOP dbms_output.put_line('t2:'||t2(i)); END LOOP; END;
3.multiset union 合ƈ包含重复?/multiset union distinct 合ƈ去重复?br />
DECLARE TYPE t_user_id ISTABLEOF test_forall.user_id%TYPE; t1 t_user_id := t_user_id(1,2,3); t2 t_user_id := t_user_id(1,2,3,4); BEGIN t2 := t2 MULTISET UNIONDISTINCT t1; FOR i IN1..t2.count LOOP dbms_output.put_line('t2:'||t2(i)); END LOOP; END;
4.集合求差
DECLARE TYPE t_user_id ISTABLEOF test_forall.user_id%TYPE; t1 t_user_id := t_user_id(1,2,3); t2 t_user_id := t_user_id(1,2,3,4); BEGIN t2 := t2 MULTISET EXCEPT t1; FOR i IN1..t2.count LOOP dbms_output.put_line('t2:'||t2(i)); END LOOP; END;
createtable test_forall ( user_idnumber(10), user_namevarchar2(20)); SELECT*FROM ex_edm_esp; SELECT*FROM test_forall; DECLARE TYPE forall_table ISTABLEOF test_forall%ROWTYPE; test_table forall_table; BEGIN SELECT ID,esp_name BULK COLLECT INTO test_table FROM ex_edm_esp; FORALL idx IN test_table.first..test_table.last INSERTINTO test_forall VALUES test_table(idx); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; END;
for all 的另一U写?
FORALL idx IN VALUE OF test table
2).在fetch into中?forall, indices of, bulk collect;
DECLARE TYPE forall_table ISTABLEOF test_forall%ROWTYPE; test_table forall_table; CURSOR test_cur ISSELECT ID,esp_name FROM ex_edm_esp; BEGIN OPEN test_cur; FETCH test_cur BULK COLLECT INTO test_table; CLOSE test_cur;
-- 跌集合中的null元素 FORALL idx IN INDICES OF test_table INSERTINTO test_forall VALUES test_table(idx); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; END;
3).在returning into 之中使用 forall in, value of, bulk collect;
DECLARE TYPE t_user_id ISTABLEOF test_forall.user_id%TYPE; t1 t_user_id; TYPE t_user_name ISTABLEOF test_forall.user_name%TYPE; t2 t_user_name; BEGIN DELETEFROM test_forall RETURNING user_id, user_nameBULK COLLECT INTO t1,t2; FOR i IN t1.first..t1.last LOOP dbms_output.put_line(t1(i)); dbms_output.put_line(t2(i)); END LOOP; ROLLBACK; EXCEPTION WHEN OTHERS THEN ROLLBACK; END;