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

下载本文档

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

文档简介

PL SQL基础培训 刘丹2012 8 25 CUC AS1 N3 PL SQL语言的编程规范Oracle数据库的基本数据类型和函数应用PL SQL语言编写基本的sql 通过本章的学习应该掌握 一 PL SQL语言编程规范 1 命名语言 命名使用能表述对象意义的单词或者约定俗成的符号 不允许使用中文或者特殊符号 单词分隔 命名的各单词使用下划线进行分隔 保留字 命名禁止使用sql保留字 可以在v reserved words视图中查找所有的保留字 命名长度 限制在30个字符内 含前缀 2 命名规范普通变量 前缀为v 存放字符 数字 日期型变量 游标变量 前缀为cur 存放游标记录集 存储过程 前缀为p 按照业务操作命名 函数 前缀为f 按照业务操作命名 包 前缀为pkg 按照业务操作集合命名 触发器 前缀为trig 触发器名是前缀 表名 触发器名索引 前缀为IDX 索引名是前缀 表名 索引字段 3 使用绑定变量当一个sql语句提交后 oracle会首先检查一下共享缓冲池 sharedpool 里有没有与之完全相同的语句 如果有的话只须执行软分析即可 否则就得进行硬分析 而唯一使得oracle能够重复利用执行计划的方法就是采用绑定变量 绑定变量的实质就是用于替代sql语句中的常量的替代变量 绑定变量能够使得每次提交的sql语句都完全一样硬解析需要经解析 制定执行路径 优化访问计划等许多的步骤 如果你的查询本身耗时就很长 就没必要绑定变量了 因为解析的消耗微乎其微selectsql text parse callsfromv sqlwheresql textlike UPDATEAA1 eg ls sql updateAA1setstatus 1 sale trade id v trade id sale date sysdatewherecard no 1 executeimmediatels sqlusingvi card no PL SQL语言 1 基本数据类型VARCHAR2变长字符串 最长为4000字符 NUMBER数值型 LONG变长字符数据 最长为2G字节 DATE日期型 RAW二进制数据 最长为255字节 LONGRAW变长二进制数据 最长为2G字节 CHAR定长字符数据 最长为255 LOB大对象 数据类型CLOB可用于存储非结构化的XML文档 BLOB可以存储较大的二进制对象 如图形 视频剪辑和声音剪辑等 二 基本数据类型与函数 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 单行函数 返回基于单行的单一结果 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 嵌套函数 函数可以嵌套 优先权基于位置 遵循由内到外 由左到右的原则 PL SQL语言 Oracle扩展PL SQL简介 PL SQL是Oracle对SQL规范的扩展 是一种块结构语言 即构成一个PL SQL程序的基本单位 过程 函数和无名块 是逻辑块 可包含任何数目的嵌套了快 这种程序结构支持逐步求精方法解决问题 一个块 或子块 将逻辑上相关的说明和语句组合在一起 其形式为 DECLARE 说明BEGIN 语句序列EXCEPTION 例外处理程序END 三 应用PL SQL语言编写基本的sql PL SQL语言 控制语句1 分支语句 IFconditionTHENSequence of statements ENDIF IFconditionTHENSequence of statement1 ELSESequence of statement2 ENDIF PL SQL语言 2 循环语句 LOOPSequence of statements IFconditionTHENEXIT ENDIF ENDLOOP WHILEconditionLOOPSequence of statements ENDLOOP FORcounterINlower bound higher boundLOOPSequence of statements ENDLOOP PL SQL语言 数据操纵语言命令 DML 用于在关系数据库对象中操纵数据INSERTinsertintotab name col1 col2 values 1 2 UPDATEupdatetab nameaseta col1 1 wherecol2 1 DELETEdeletefromtab namewherecol1 1 PL SQL语言 数据控制语言命令 DCL 用于创建与用户访问相关的对象 也控制着用户的权限分配ALTERPASSWORD改变口令GRANT为用户授予特权REVOKE从用户处收回特权 事物控制命令 Commit完成事务 数据修改成功并对其他用户开放 Rollback撤销事务 撤销所有操作 rollbacktosavepoint撤销在设置的回滚点以后的操作 settransaction响应事务或语句的一致性 特别对于事务使用回滚段 PL SQL语言 数据定义语言命令 DDL Create 创建某个对象Createtabletab name colvarchar 2 notnull Drop 删除某个对象Droptable view tab name Grant 赋予权限命令Grantupdateontab nametouser name Revoke 收回权限命令Revokeupdateontab namefromuser name PL SQL语言 SQL中操作符的使用 定义 操作符是保留的字或字符 主要用于比较和算术运算 分类 比较操作符 逻辑操作符和算术运算符 1 比较操作符包括 注意比较双方的数据类型 2 算术运算符包括 等 与数学运算规则一致 PL SQL语言 SQL中逻辑操作符的使用 ISNULL 是否为空 BETWEEN 在某两个值之间 IN 一系列值中 LIKE 相似值的比较 EXITS 是否存在符合条件的数据 ALL ANY 一组数据的所有 其中的任何一个 AND OR 逻辑与 或 PL SQL语言 子程序1 存储过程 CREATEPROCEDURE过程名 参数说明1 参数说明2 IS 局部说明 BEGIN执行语句 END过程名 2 存储函数 CREATEFUNCTION函数名 参数说明1 参数说明2 RETURN类型IS 局部说明 BEGIN执行语句 END函数名 PL SQL语言 应用PL SQL语言编写sql sql语句不区分大小写sql语句可以由一行或者多行组成在一行中关键字不能缩写或者被拆开子句通常书写在不同的行上采用行缩进来增强程序的阅读性 PL SQL语言 CASE表达式 CASEWHENcomparison expr1THENreturn expr1 WHENcomparison expr2THENreturn expr2WHENcomparison exprnTHENreturn exprnELSEelse expr END PL SQL语言 DECODE表达式 DECODE col expression search1 result1 search2 result2 default DECODE语句 IF THEN ELSE的实现 PL SQL语言 type用法 declaremyidaa2 MDATE type mynameaa2 SNUM type beginselectMDATE SNUMintomyid mynamefromaa2whereMDATE 20120801 dbms output put line myid dbms output put line myname end 当表结构字段类型或者长度变化后 程序中无需在变 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 PL SQL语言 TYPE用法 相当于结构体 declarelv order dateDAte sysdate lv last txtvarchar2 5 default 001 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 PL SQL语言 游标的使用 declare 类型定义cursorc jobisselectMDATE SNUMfromaa2 定义一个游标变量c rowc job rowtype beginforc rowinc jobloopdbms output put line c row MDATE c row SNUM endloop end 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 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 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 PL SQL语言 exception用法 declareexException v MDATEaa2 mdate type begin Updateaa2setSNUM 14 MDATE 11111111111111 whereMDATE 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 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触发器 系统触发器 的语法格式和作用有较大区别 PL SQL语言 触发器使用 CREATEORREPLACETRIGGERtr aa2AFTER BEFORE INSERTORDELETEORUPDATE 一个是在记录操作之前触发 一个是在记录操作之后触发 ONaa2FOREACHROW 去掉FOREACHROW 行触发器及语句触发器 BEGINIFUPDATING snum THENRETURN ENDIF if new mdate 20120814 thenreturn elseifinsertingtheninsertintoaa3values new mdate new snum endif ifupdatingtheninsertintoaa3values old mdate old snum endif endif END PL SQL语言 视图使用 视图是存储在数据库中的预先定义好的查询 具有表的外观 可以象表一样对其进行存取 但不占据物理存储空间createorreplaceviewview aa2asselectMDATE SNUMfromaa2groupbyMDATE SNUM 视图是可以被更新的 但必须 view的字段只涉及一个表 2 如果涉及多个表的话 被 涉及到的 view列所映射table列 或列的组合 必须是有主健或者unique约束的3 强制执行 方法是加上hint BYPASS UJVC 视图中使用触发器createorreplacetriggertrg view aa2insteadofupdateonview aa2foreachrowbeginupdateaa2setsnum 15 end PL SQL语言 同义词使用 createorreplacesynonymmd areaforitg1 admin md area oracle同义词有两种类型 分别是公用Oracle同义词与私有Oracle同义词此外如果要创建一个远程的数据库上的某张表的同义词 需要先创建一个DatabaseLink 数据库连接 来扩展访问 然后在使用如下语句创建数据库同义词 createsynonymtable namefortable name DB Link 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防止这种情况 PL SQL语言 主键 约束 主键 PRIMARYKEY主键约束惟一地标识一行 作为一个可以被外键有效引用的对象外键 FOREIGNKEY外键约束外键是该表是另一个表之间联接的字段外键必须为另一个表中的主键外键的用途是确保数据的完整性唯一约束 UNIQUE唯一约束唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的条件约束CHECK条件约束指定该列是否满足某个条件ALTERTABLEstudentADDCONSTRAINTuk studentUNIQUE ment ALTERTABLEstudentDROPCONSTRAINTuk student ALTERTABLEstudentADDCONSTRAINTstu classFOREIGNKEY classid REFERENCESclass cid ALTERTABLEstudentADDCONSTRAINTstudent age ckCHECK age 18 PL SQL语言 索引 1 Tree索引 Createindexindexnameontablename columnname columnname 2 反向索引 Createindexindexnameontablename columnname columnname reverse 3 降序索引 Createindexindexnameontablename columnnameDESC columnname 4 位图索引 CreateBITMAPindexindexnameontablename columnname columnname 5 函数索引 Createindexindexnameontablename functionname columnname PL SQL语言 存储函数和过程及包 1 创建存储过程和函数 2 正确使用系统级的异常处理和用户定义的异常处理 3 建立和管理存储过程和函数 4 通过使用包 就可以分类管理过程和函数 使用包还有一个好处 就是可以在包中定义自定义类型 从而在过程和函数可以直接用于定义变量 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 范围 列表分区 复合分区 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 PL SQL语言 使用DBMS JOB软件包定时调度 SQL variablennumber 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 或者 SQL variablejob card syncnumberexecutedbms job submit job card sync PKP TEST1 p stat test1 sysdate 1 48 SYSDATE 1 commit 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及线性的衰减函数 计算任何未排序分区的统计值 PL SQL语言 分析函数 2 PARTITION子句按照表达式分区 就是分组 如果省略了分区子句 则全部的结果集被看作是一个单一的组3 ORDERBY子句分析函数中ORDERBY的存在将添加一个默认的开窗子句 这意味着计算中所使用的行的集合是当前分区中当前行和前面所有行 没有ORDERBY时 默认的窗口是全部的分区在Orderby子句后可以添加nullslast 如 orderbycommdescnullslast表示排序时忽略comm列为空的行 4 WINDOWING子句用于定义分析函数将在其上操作的行的集合Windowing子句给出了一个定义变化或固定的数据窗口的方法 分析函数将对这些数据进行操作默认的窗口是一个固定的窗口 仅仅在一组的第一行开始 一直继续到当前行 要使用窗口 必须使用ORDERBY子句根据2个标准可以建立窗口 数据值的范围 RANGES 或与当前行的行偏移量 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后 PL SQL语言 正则表达式 方括号表达式描述 alnum 字母和数字混合的字符 alpha 字母字符 cntrl 控制字符 digit 数字字符 graph 图像字符 lower 小写字母字符 print 打印字符 punct 标点符号字符 space 空格字符 upper 大写字母字符 xdigit 十六进制数字字符相当于 0 9a fA F 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 n m 出现次数 n m 表示出现m次 m 表示至少出现m次 表示或者的关系 指明两项之间的一个选择 PL SQL语言 正则表达式 REGEXP LIKE source string pattern match parameter source string 源字符串pattern 正则表达式match parameter 匹配模式 i 不区分大小写 c 区分大小写 n 允许使用可以匹配任意字符串的操作符 m 将x作为一个包含多行的字符串REGEXP REPLACE source string pattern replace string position occurtence match parameter replace string 用于替换的字符串position 开始搜索的起始位置occurtence 指定替换第n次出现字符串REGEXP SUBSTR source string pattern position occurrence match parameter REGEXP INSTR source string pattern start position occurrence return option match parameter start position 开始搜索位置Occurrence 第n次出现pattern 默认为1return option 0 pattern的起始位置 1 pattern下一个字符起始位置 默认为0REGEXP COUNT source string pattern start position match parameter 11g新增的函数 表示pattern在原字符串中出现的次数start position 开始搜索的位置 PL SQL语言 MERGEINTO的用途 MERGEINTO是Oracle9i以后才出现的新的功能 那这个功能是什么呢 简单来说 就是 有则更新 无则插入 从这句话里 应该可以理解到 mergeinto操作一个对象 A 的时候 要有另外一个结果集做为源数据 B mergeinto 将B中的数据与A中的数据按照一定条件 C 进行对比 如果A中数据满足C条件 则进行update操作 如果不满足条件 C 则进行insert操作 请注意这种对应关系 2 语法结构MERGE INTO schema table alias USING schema table views query alias ON condition WHENMATCHEDTHENUPDATESET clause WHENNOTMATCHEDTHENINSERTVALUES clause PL SQL语言 OracleSQL的四种用法 SQL NOTFOUND 更新 删除操作时没找到符合条件的记录 SQL FOUND SELECTCOLUMNNAMEINTO 更新 删除找到符合条件的记录顶部的SQL ROWCOUNT 判定当前更新记录数SQL ISOPEN的 如果游标打开 则为TRUE 如果游标关闭 则为FALSE 对于隐式游标而言SQL ISOPEN总是FALSE 这是因为隐式游标在DML语句执行时打开 结束时就立即关闭TRUE如果此属性的产量 影响一个或多个行INSERT UPDATE或DELETE语句或SELECTINTO语句返回一个或多个行 否则 它会产生FALSE ISOPEN属性 通常会产生假的 因为Oracle会自动关闭SQL游标后执行相关的SQL语句 NOTFOUND属性是相反的逻辑 它会产生TRUE如果一个INSERT UPDATE或DELETE语句影响的任何行 或SELECTINTO语句不返回任何行 否则 它会产生FALSE ROWCOUNT属性得到受影响的INSERT UPDATE或DELETE语句或SELECTINTO语句返回的行数 PL SQL语言 insertall FIRST使用 对于INSERTALL 只要WHEN子句条件符合 就会一次查詢整表 一次插入所有滿足条件的记录 所以就可能数据來源表中一条记录会被重复插入到不同的表中 对于INSERTFIRST 是一条条取数据來源表中的条记录 然后去匹配WHEN条件子句 但是一但第一次插入后就会去取下一条记录 不管该记录条是否匹配几个WHEN条件子句 1 无条件插入InsertAllIntoz test1 id name values id name Intoz test2 id values id Selectid namefromz test 2 有条件插入InsertAllwhenid 5thenintoz test1 id name values id name whenid2thenintoz test2 id values id elseintoz test3values name select fromz test 3 InsertFirstwhenid 5thenintoz test1values id name whenid2thenintoz test2values id elseintoz test3values name select fromz test 2 和 3 区别在 3 不会在把id 5的记录插入到id2对应的表中 PL SQL语言 oracle全局临时表的使用 CREATEGLOBALTEMPORARYTABLETABLENAME COL1VARCHAR2 10 COL2NUMBER ONCOMMITPRESERVE DELETE ROWS 这种临时表不占用表空间 而且不同的SESSION之间互相看不到对方的数据在会话结束后表中的数据自动清空 如果选了DELETEROWS

温馨提示

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

评论

0/150

提交评论