PL_SQL基础培训PPT课件_第1页
PL_SQL基础培训PPT课件_第2页
PL_SQL基础培训PPT课件_第3页
PL_SQL基础培训PPT课件_第4页
PL_SQL基础培训PPT课件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,1,PL/SQL基础培训刘丹2012.8.25,CUC-AS1-N3,.,2,.,3,PL/SQL语言的编程规范Oracle数据库的基本数据类型和函数应用PL/SQL语言编写基本的sql,通过本章的学习应该掌握:,.,4,一、PL/SQL语言编程规范,1)命名语言-命名使用能表述对象意义的单词或者约定俗成的符号,不允许使用中文或者特殊符号。单词分隔-命名的各单词使用下划线进行分隔。保留字-命名禁止使用sql保留字(可以在v$reserved_words视图中查找所有的保留字)。命名长度-限制在30个字符内(含前缀)。,.,5,2)命名规范普通变量-前缀为v_,存放字符、数字、日期型变量。游标变量-前缀为cur_,存放游标记录集。存储过程-前缀为p_,按照业务操作命名。函数-前缀为f_,按照业务操作命名。包-前缀为pkg_,按照业务操作集合命名。触发器-前缀为trig_,触发器名是前缀+表名+触发器名索引-前缀为IDX_,索引名是前缀+表名+索引字段,.,6,3)使用绑定变量当一个sql语句提交后,oracle会首先检查一下共享缓冲池(sharedpool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。而唯一使得oracle能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.如果你的查询本身耗时就很长,就没必要绑定变量了,因为解析的消耗微乎其微selectsql_text,parse_callsfromv$sqlwheresql_textlikeUPDATEAA1%eg:ls_sql:=updateAA1setstatus=1,sale_trade_id=|v_trade_id|,sale_date=sysdatewherecard_no=:1;executeimmediatels_sqlusingvi_card_no;,.,7,PL/SQL语言,1)基本数据类型VARCHAR2变长字符串,最长为4000字符。NUMBER数值型。LONG变长字符数据,最长为2G字节。DATE日期型。RAW二进制数据,最长为255字节。LONGRAW变长二进制数据,最长为2G字节。CHAR定长字符数据,最长为255。LOB大对象”数据类型CLOB可用于存储非结构化的XML文档。BLOB可以存储较大的二进制对象,如图形、视频剪辑和声音剪辑等。,二、基本数据类型与函数,.,8,PL/SQL语言,2)函数,单行字符串函数-ASCII(),INSTR(),LENGTH(),UPPER(),LPAD(),LTRIM(),RPAD(),RTRIM(),REPLACE(),SUBSTR(),TRIM(),CONCAT()单行数字函数-ABS(),ACOS(),ASIN(),ATAN(),CEIL(),COS(),LOG(),MOD(),ROUND(),SIN(),TRUNC()单行日期函数-ADD_MONTHS(),LAST_DAY(),MONTHS_BETWEEN(),NEW_TIME(),NEXT_DAY(),ROUND(),SYSDATE,TRUNC(),TO_CHAR(),TO_DATE(),TO_NUMBER()其他单行函数-BFILENAME(),DECODE(),DUMP(),GREATEST(),LEAST(),USERENV(),NVL()NULL和单行函数-NULL值表示一个未知数据或者一个空值,算术操作符的任何一个操作数为NULL值,结果均为NULL值,这个规则也适合很多函数,只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NVL参数时可以返回非NULL值。,a、单行函数-返回基于单行的单一结果,.,9,PL/SQL语言,又名集合函数-AVG(),COUNT(),MAX(),MIN(),STDDEV(),SUM(),VARIANCE()数据进行分组-GROUPBYOracle的GROUPBY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A,B,C)的话,首先会对(A、B、C)进行GROUPBY,然后对(A、B)进行GROUPBY,然后是(A)进行GROUPBY,最后对全表进行GROUPBY操作。如果是GROUPBYCUBE(A,B,C),则首先会对(A、B、C)进行GROUPBY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUPBY操作。grouping_id()可以美化效果,b、组函数-返回基于多行的单一结果,c、嵌套函数-函数可以嵌套,优先权基于位置,遵循由内到外,由左到右的原则。,.,10,PL/SQL语言,Oracle扩展PL/SQL简介,PL/SQL是Oracle对SQL规范的扩展,是一种块结构语言,即构成一个PL/SQL程序的基本单位(过程、函数和无名块)是逻辑块,可包含任何数目的嵌套了快。这种程序结构支持逐步求精方法解决问题。一个块(或子块)将逻辑上相关的说明和语句组合在一起,其形式为:DECLARE-说明BEGIN-语句序列EXCEPTION-例外处理程序END;,三、应用PL/SQL语言编写基本的sql,.,11,PL/SQL语言,控制语句1)分支语句:IFconditionTHENSequence_of_statements;ENDIF;IFconditionTHENSequence_of_statement1;ELSESequence_of_statement2;ENDIF;,.,12,PL/SQL语言,2)循环语句:LOOPSequence_of_statements;IFconditionTHENEXIT;ENDIF;ENDLOOP;WHILEconditionLOOPSequence_of_statements;ENDLOOP;FORcounterINlower_bound.higher_boundLOOPSequence_of_statements;ENDLOOP;,.,13,PL/SQL语言,数据操纵语言命令(DML),用于在关系数据库对象中操纵数据INSERTinsertintotab_name(col1,col2)values(1,2);UPDATEupdatetab_nameaseta.col1=1wherecol2=1;DELETEdeletefromtab_namewherecol1=1;,.,14,PL/SQL语言,数据控制语言命令(DCL)用于创建与用户访问相关的对象,也控制着用户的权限分配ALTERPASSWORD改变口令GRANT为用户授予特权REVOKE从用户处收回特权,事物控制命令,Commit完成事务,数据修改成功并对其他用户开放。Rollback撤销事务,撤销所有操作。rollbacktosavepoint撤销在设置的回滚点以后的操作。settransaction响应事务或语句的一致性,特别对于事务使用回滚段。,.,15,PL/SQL语言,数据定义语言命令(DDL),Create-创建某个对象Createtabletab_name(colvarchar(2)notnull);Drop-删除某个对象Droptable(view)tab_name;Grant-赋予权限命令Grantupdateontab_nametouser_name;Revoke-收回权限命令Revokeupdateontab_namefromuser_name;,.,16,PL/SQL语言,SQL中操作符的使用,定义:操作符是保留的字或字符,主要用于比较和算术运算。分类:比较操作符,逻辑操作符和算术运算符。1、比较操作符包括:=,,=。注意比较双方的数据类型。2、算术运算符包括:+,-,*,/等。与数学运算规则一致。,.,17,PL/SQL语言,SQL中逻辑操作符的使用,ISNULL(是否为空)BETWEEN(在某两个值之间)IN(一系列值中)LIKE(相似值的比较)EXITS(是否存在符合条件的数据)ALL/ANY(一组数据的所有/其中的任何一个)AND/OR(逻辑与/或),.,18,PL/SQL语言,子程序1)存储过程:CREATEPROCEDURE过程名(参数说明1,参数说明2,。)IS局部说明BEGIN执行语句;END过程名;2)存储函数:CREATEFUNCTION函数名(参数说明1,参数说明2,。)RETURN类型IS局部说明BEGIN执行语句;END函数名;,.,19,PL/SQL语言,应用PL/SQL语言编写sql,sql语句不区分大小写sql语句可以由一行或者多行组成在一行中关键字不能缩写或者被拆开子句通常书写在不同的行上采用行缩进来增强程序的阅读性,.,20,PL/SQL语言,CASE表达式,CASEWHENcomparison_expr1THENreturn_expr1WHENcomparison_expr2THENreturn_expr2WHENcomparison_exprnTHENreturn_exprnELSEelse_exprEND,.,21,PL/SQL语言,DECODE表达式,DECODE(col|expression,search1,result1,search2,result2,.,default)DECODE语句=IF-THEN-ELSE的实现,.,22,PL/SQL语言,%type用法,declaremyidaa2.MDATE%type;mynameaa2.SNUM%type;beginselectMDATE,SNUMintomyid,mynamefromaa2whereMDATE=20120801;dbms_output.put_line(myid);dbms_output.put_line(myname);end;/当表结构字段类型或者长度变化后,程序中无需在变,.,23,PL/SQL语言,%rowtype用法,declaretypetype_deptistableofaa2%rowtypeindexbybinary_integer;tbtype_dept;begintb(1).MDATE:=20120812;tb(1).SNUM:=12;tb(2).MDATE:=20120813;tb(2).SNUM:=13;dbms_output.put_line(tb(1).MDATE|tb(1).SNUM);dbms_output.put_line(tb.COUNT);end;/,.,24,PL/SQL语言,TYPE用法,相当于结构体,declarelv_order_dateDAte:=sysdate;lv_last_txtvarchar2(5)default001;lv_lastvarchar2(10)notnull:=us;TYPEtype_testisrecord(MDATEaa2.MDATE%type,SNUMaa2.SNUM%type);rectype_test;beginlv_order_date:=sysdate;dbms_output.put_line(lv_last);selectMDATE,SNUMintorecfromaa2whereMDATE=20120801;dbms_output.put_line(rec.MDATE);dbms_output.put_line(rec.SNUM);end;,.,25,PL/SQL语言,游标的使用:,declare-类型定义cursorc_jobisselectMDATE,SNUMfromaa2;-定义一个游标变量c_rowc_job%rowtype;beginforc_rowinc_jobloopdbms_output.put_line(c_row.MDATE|-|c_row.SNUM);endloop;end;,.,26,PL/SQL语言,游标的使用:Fetch游标,使用的时候必须要明确的打开和关闭,declare-类型定义cursorc_jobisselectMDATE,SNUMfromaa2;-定义一个游标变量c_rowc_job%rowtype;beginopenc_job;loop-提取一行数据到c_rowfetchc_jobintoc_row;-判读是否提取到值,没取到值就退出-取到值c_job%notfound是false-取不到值c_job%notfound是trueexitwhenc_job%notfound;dbms_output.put_line(c_row.MDATE|-|c_row.SNUM);endloop;-关闭游标closec_job;end;,.,27,PL/SQL语言,游标的使用:别的写法,declare-类型定义cursorc_jobisselectMDATE,SNUMfromaa2;-定义一个游标变量c_rowc_job%rowtype;beginopenc_job;-给第一行数据fetchc_jobintoc_row;whilec_job%foundloopdbms_output.put_line(c_row.MDATE|-|c_row.SNUM);-给下一行喂数据fetchc_jobintoc_row;endloop;-关闭游标closec_job;end;,.,28,PL/SQL语言,游标的使用:UPDATE写法,declare-类型定义cursorc_jobisselectMDATE,SNUMfromaa2forupdateOFSNUM;-定义一个游标变量c_rowc_job%rowtype;beginopenc_job;-给第一行数据fetchc_jobintoc_row;whilec_job%foundloopUPDATEaa2SETSNUM=SNUM+1WHERECURRENTOFc_job;-给下一行喂数据fetchc_jobintoc_row;endloop;-关闭游标closec_job;commit;end;,.,29,PL/SQL语言,exception用法,declareexException;v_MDATEaa2.mdate%type;begin/*Updateaa2setSNUM=14,MDATE=11111111111111whereMDATE=20120812;*/selectMDATEintov_MDATEfromaa2/*whereMDATE=20120814*/;ifSQL%NOTFOUNDThenRaiseex;endif;commit;ExceptionWhenexthendbms_output.put_line(updatefailed.);rollback;whenNO_DATA_FOUNDthendbms_output.put_line(norecordisfound);whenTOO_MANY_ROWSthendbms_output.put_line(toomanyrowsareselected);whenOTHERSthendbms_output.put_line(errormessage:|SQLERRM);rollback;end;/,.,30,PL/SQL语言,触发器注意点,触发器不接受参数。一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。在一个表上的触发器越多,对在该表上的DML操作的性能影响就越大。触发器最大为32KB。若确实需要,可以先建立过程,然后在触发器中用CALL语句进行调用。在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)。触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。在触发器主体中不能申明任何Long和blob变量。新值new和旧值old也不能向表中的任何long和blob列。不同类型的触发器(如DML触发器、INSTEADOF触发器、系统触发器)的语法格式和作用有较大区别。,.,31,PL/SQL语言,触发器使用,CREATEORREPLACETRIGGERtr_aa2AFTER(BEFORE)INSERTORDELETEORUPDATE(一个是在记录操作之前触发,一个是在记录操作之后触发)ONaa2FOREACHROW(去掉FOREACHROW,行触发器及语句触发器)BEGINIFUPDATING(snum)THENRETURN;ENDIF;if:new.mdate=20120814thenreturn;elseifinsertingtheninsertintoaa3values(:new.mdate,:new.snum);endif;ifupdatingtheninsertintoaa3values(:old.mdate,:old.snum);endif;endif;END;,.,32,PL/SQL语言,视图使用,视图是存储在数据库中的预先定义好的查询,具有表的外观,可以象表一样对其进行存取,但不占据物理存储空间createorreplaceviewview_aa2asselectMDATE,SNUMfromaa2groupbyMDATE,SNUM;视图是可以被更新的,但必须:view的字段只涉及一个表。2.如果涉及多个表的话,被(涉及到的)view列所映射table列(或列的组合)必须是有主健或者unique约束的3.强制执行,方法是加上hint/*+BYPASS_UJVC*/视图中使用触发器createorreplacetriggertrg_view_aa2insteadofupdateonview_aa2foreachrowbeginupdateaa2setsnum=15;end;,.,33,PL/SQL语言,同义词使用,createorreplacesynonymmd_areaforitg1_admin.md_area;oracle同义词有两种类型,分别是公用Oracle同义词与私有Oracle同义词此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个DatabaseLink(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:createsynonymtable_namefortable_nameDB_Link;,.,34,PL/SQL语言,序列使用,CREATESEQUENCEemp_sequenceINCREMENTBY1每次加几个STARTWITH1从1开始计数NOMAXVALUE不设置最大值NOCYCLE一直累加,不循环CACHE10NOORDER;并行时取得序列的顺序一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVALCURRVAL=返回sequence的当前值NEXTVAL=增加sequence的值,然后返回sequence值createsequenceSEQ_TESTminvalue1maxvalue999999999999999999999999999startwith1incrementby1cache10;如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失.所以可以在createsequence的时候用nocache防止这种情况,.,35,PL/SQL语言,主键,约束,主键:PRIMARYKEY主键约束惟一地标识一行。作为一个可以被外键有效引用的对象外键:FOREIGNKEY外键约束外键是该表是另一个表之间联接的字段外键必须为另一个表中的主键外键的用途是确保数据的完整性唯一约束:UNIQUE唯一约束唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的条件约束CHECK条件约束指定该列是否满足某个条件ALTERTABLEstudentADDCONSTRAINTuk_studentUNIQUE(ment);ALTERTABLEstudentDROPCONSTRAINTuk_student;ALTERTABLEstudentADDCONSTRAINTstu_classFOREIGNKEY(classid)REFERENCESclass(cid);ALTERTABLEstudentADDCONSTRAINTstudent_age_ckCHECK(age18);,.,36,PL/SQL语言,索引,(1)*Tree索引。Createindexindexnameontablename(columnnamecolumnname.)(2)反向索引。Createindexindexnameontablename(columnnamecolumnname.)reverse(3)降序索引。Createindexindexnameontablename(columnnameDESCcolumnname.)(4)位图索引。CreateBITMAPindexindexnameontablename(columnnamecolumnname.)(5)函数索引。Createindexindexnameontablename(functionname(columnname),.,37,PL/SQL语言,存储函数和过程及包,1创建存储过程和函数。2正确使用系统级的异常处理和用户定义的异常处理。3建立和管理存储过程和函数。4,通过使用包,就可以分类管理过程和函数。使用包还有一个好处,就是可以在包中定义自定义类型,从而在过程和函数可以直接用于定义变量,.,38,PL/SQL语言,分区,范围分区:createtablePartition_Test(PIDnumbernotnull)partitionbyrange(PID)(partitionpart_01valueslessthan(50000)tablespacedinya_space01,partitionpart_02valueslessthan(100000)tablespacedinya_space02,partitionpart_03valueslessthan(maxvalue)tablespacedinya_space03)Hash分区(散列分区):partitionbyhash(PID)(partitionpart_h01tablespacedinya_space01,partitionpart_h02tablespacedinya_space02,partitionpart_h03tablespacedinya_space03)List分区(列表分区):PARTITIONBYLIST(sales_state)(PARTITIONsales_westVALUES(California,Hawaii)COMPRESS,范围-散列分区(复合分区)partitionbyrange(PDATA)subpartitionbyhash(PID)subpartitions3storein(dinya_space01,dinya_space02,dinya_space03)(partitionpart_fh01valueslessthan(to_date(2004-01-01,yyyy-mm-dd)tablespacedinya_space01,partitionpart_fh02valueslessthan(to_date(2008-01-01,yyyy-mm-dd)tablespacedinya_space02,partitionpart_fh03valueslessthan(maxvalue)tablespacedinya_space03)范围-列表分区(复合分区),.,39,PL/SQL语言,分区,增加一个分区altertablePart_Taddpartitionpart_05valueslessthan(10020)tablespacedinya查询分区数据select*fromPartition_FHTestpartition(part_fh02)t(delete,update)Tuncate分区数据altertablexxtruncatepartitionupdateglobalindexes(rebuildindex)合并分区altertablePartition_HBmergepartitionspart_01,part_02intopartitionpart_02;拆分分区-spiltpartition分区名at(这里是一个临界区,比如:50000就是说小于50000的放在part_01,而大于50000的放在part_02中)altertablePartition_HBsplitPartitionpart_02at(50000)into(Partitionpart_01tablespacedinya_space01,Partitionpart_02tablespacedinya_space02);更改分区名altertablePartition_HBrenamePartitionpart_01_testtopart_02;,.,40,PL/SQL语言,使用DBMS_JOB软件包定时调度,SQLvariablennumber;begindbms_job.submit(job=:n,what=PKP_TEST1.p_stat_test1;,next_date=to_date(01-09-201204:00:00,dd-mm-yyyyhh24:mi:ss),interval=sysdate+1);Commit;end;/或者:SQLvariablejob_card_syncnumberexecutedbms_job.submit(:job_card_sync,PKP_TEST1.p_stat_test1;,sysdate+1/48,SYSDATE+1);commit;,.,41,PL/SQL语言,分析函数,ORACLE提供了26个分析函数,按功能分5类分析函数分类等级(ranking)函数:用于寻找前N种查询开窗(windowing)函数:用于计算不同的累计,如SUM,COUNT,AVG,MIN,MAX等,作用于数据的一个窗口上例:sum(t.sal)over(orderbyt.deptno,t.ename)running_total,sum(t.sal)over(partitionbyt.deptnoorderbyt.ename)department_total制表(reporting)函数:与开窗函数同名,作用于一个分区或一组上的所有列例:sum(t.sal)over()running_total2,sum(t.sal)over(partitionbyt.deptno)department_total2制表函数与开窗函数的关键不同之处在于OVER语句上缺少一个ORDERBY子句!LAG,LEAD函数:这类函数允许在结果集中向前或向后检索值,为了避免数据的自连接,它们是非常用用的.VAR_POP,VAR_SAMP,STDEV_POPE及线性的衰减函数:计算任何未排序分区的统计值,.,42,PL/SQL语言,分析函数,2)PARTITION子句按照表达式分区(就是分组),如果省略了分区子句,则全部的结果集被看作是一个单一的组3)ORDERBY子句分析函数中ORDERBY的存在将添加一个默认的开窗子句,这意味着计算中所使用的行的集合是当前分区中当前行和前面所有行,没有ORDERBY时,默认的窗口是全部的分区在Orderby子句后可以添加nullslast,如:orderbycommdescnullslast表示排序时忽略comm列为空的行.4)WINDOWING子句用于定义分析函数将在其上操作的行的集合Windowing子句给出了一个定义变化或固定的数据窗口的方法,分析函数将对这些数据进行操作默认的窗口是一个固定的窗口,仅仅在一组的第一行开始,一直继续到当前行,要使用窗口,必须使用ORDERBY子句根据2个标准可以建立窗口:数据值的范围(RANGES)或与当前行的行偏移量,.,43,PL/SQL语言,分析函数,5)Rang窗口Range5preceding:将产生一个滑动窗口,他在组中拥有当前行以前5行的集合ANGE窗口仅对NUMBERS和DATES起作用,因为不可能从VARCHAR2中增加或减去N个单元另外的限制是ORDERBY中只能有一列,因而范围实际上是一维的,不能在N维空间中例:avg(t.sal)over(orderbyt.hiredateascrange100preceding)统计前100天平均工资6)Row窗口利用ROW分区,就没有RANGE分区那样的限制了,数据可以是任何类型,且ORDERBY可以包括很多列7)Specifying窗口UNBOUNDEDPRECEDING:这个窗口从当前分区的每一行开始,并结束于正在处理的当前行CURRENTROW:该窗口从当前行开始(并结束)NumericExpressionPRECEDING:对该窗口从当前行之前的数字表达式(NumericExpression)的行开始,对RANGE来说,从从行序值小于数字表达式的当前行的值开始.NumericExpressionFOLLOWING:该窗口在当前行NumericExpression行之后的行终止(或开始),且从行序值大于当前行NumericExpression行的范围开始(或终止)rangebetween100precedingand100following:当前行100前,当前后100后,.,44,PL/SQL语言,正则表达式,方括号表达式描述:alnum:字母和数字混合的字符:alpha:字母字符:cntrl:控制字符:digit:数字字符:graph:图像字符:lower:小写字母字符:print:打印字符:punct:标点符号字符:space:空格字符:upper:大写字母字符:xdigit:十六进制数字字符相当于0-9a-fA-F,.,45,PL/SQL语言,正则表达式,元字符字符含义匹配字符串的开始位置(在中使用,此时它表示不接受该字符集合。a:匹配以a开始的字符串a:匹配不含a的字符串-当使用在a-m表示范围;当使用在第一个字符时表示连字符串,如-abc$匹配字符结束位置a$:匹配以a结束的字符串.匹配除换行符n之外的任何单字符。?匹配前面的子表达式零次或一次tr(y(ing)?):可以表示try或者trying*匹配前面的子表达式零次或多次+匹配前面的子表达式一次或多次()标记一个子表达式的开始和结束位置a(b)*可以匹配ab,abb,abbb,youabb(c|d)匹配c或d标记一个中括号表达式cd匹配选择c或d等同于(c|d)。匹配的是单字符,cd是匹配c,d之外的单字符。a-z表示所有小写字母m,nm=5thenintoz_test1values(id,name)whenid2thenintoz_test2values(id)elseintoz_test3values(name)select*fromz_test;(2)和(3)区别在(3)不会在把id5的记录插入到id2对应的表中,.,50,PL/SQL语言,oracle全局临时表的使用,CREATEGLOBALTEMPORARYTABLETABLENAME(COL1VARCHAR2(10),COL2NUMBER)ONCOMMITPRESERVE(DELETE)ROWS;这种临时表不占用表空间,而且不同的SESSION之间互相看不到对方的数据在会话结束后表中的数据自动清空,如果选了DELETEROWS,则在提交的时候即清空数据,PRESERVE则一直到会话结束-ONCOMMITDELETEROWS说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)-ONCOMMITPRESERVEROWS说明临时表是会话指定,当中断会话时ORACLE将截断表。冲突的问题更本不用考虑.临时表只是保存当前会话(session)用到的数据,数据只在事务或会话期间存在。一个会话可以启动多个事务,会话是session,指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论