1.ROW_NUMBER 返回连续的排位,不论值是否相等

 select deptno,ename,sal, row_number () over (partition by deptno
order by sal desc) rn from emp; 10 KING 5000 1
10 CLARK 2450 2
10 MILLER 1300 3
20 SCOTT 5000 1
20 FORD 3000 2
20 JONES 2975 3
20 ADAMS 1100 4
20 SMITH 800 5
30 BLAKE 2850 1
30 ALLEN 1600 2
30 TURNER 1500 3
30 WARD 1250 4
30 MARTIN 1250 5
30 JAMES 950 6

  2.DENSE_RANK 具有相等值的行排位相同,序号是连续的

 select deptno,ename,sal, DENSE_RANK () over (partition by deptno
order by sal desc) rn from emp; 10 KING 5000 1
10 CLARK 2450 2
10 MILLER 1300 3
20 SCOTT 5000 1
20 FORD 3000 2
20 JONES 2975 3
20 ADAMS 1100 4
20 SMITH 800 5
30 BLAKE 2850 1
30 ALLEN 1600 2
30 TURNER 1500 3
30 WARD 1250 4
30 MARTIN 1250 4
30 JAMES 950 5

  3.RANK 具有相等值的行排位相同,序数随后跳跃

 select deptno,ename,sal, RANK () over (partition by deptno
order by sal desc) rn from emp; 10 KING 5000 1
10 CLARK 2450 2
10 MILLER 1300 3
20 SCOTT 5000 1
20 FORD 3000 2
20 JONES 2975 3
20 ADAMS 1100 4
20 SMITH 800 5
30 BLAKE 2850 1
30 ALLEN 1600 2
30 TURNER 1500 3
30 WARD 1250 4
30 MARTIN 1250 4
30 JAMES 950 6

  4.系统常用的预定义异常

NO_DATA_FOUND:执行查询无数据、引用一个末初使化的表、通过UTL_FILE包调用到尾的文件
TOO_MANY_ROWS:采用SELECT INTO语句,但返回的记录超过了1条
DUP_VAL_ON_INDEX:插入或者更新语句,与唯一索引相冲突

ZERO_DIVIDE:0为除数
INVALID_NUMBER: 将字符串转换成数字,但是转换失败

VALUE_ERROR: 在执行转换、截断、非法转换数据到文本出错
CURSOR_ALREADY_OPEN:打开一个已经打开的游标

  5.声明用户定义异常

Declare
my_error EXCEPTION;

触发用户定义异常
RAISE my_error

  6.自定义程序异常

 RAISE_APPLICATION_ERROR使用

 DECLARE
rate itemfile.itemrate%TYPE;
rate_exception EXCEPTION;
BEGIN
SELECT NVL(itemrate,0) INTO rate FROM itemfile
WHERE itemcode = 'i207';
IF rate = 0 THEN
RAISE rate_exception;
ELSE
DBMS_OUTPUT.PUT_LINE('项费率为:' || rate);
END IF;
EXCEPTION
WHEN rate_exception THEN
RAISE_APPLICATION_ERROR(-20001, '未指定项费率');
END;

  7.游标

  7.1隐式游标:

在程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标

但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。

如前所述,DML操作和单行SELECT语句会使用隐式游标,它们是: 
* 插入操作:INSERT。 
* 更新操作:UPDATE。 
* 删除操作:DELETE。 
* 单行查询操作:SELECT ... INTO ...。

当系统使用一个隐式游标时,可以通过隐式游标的属性来了解操作的状态和结果,进而控制程序的流程。隐式游标可以使用名字SQL来访问

  1. SQL%ROWCOUNT    整型  代表DML语句成功执行的数据行数
  2. SQL%FOUND   布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
  3. SQL%NOTFOUND    布尔型 与SQL%FOUND属性返回值相反
  4. SQL%ISOPEN  布尔型 DML执行过程中为真,结束后为假

  7.2显示游标

}声明游标:CURSOR ..IS select..
}打开游标:OPEN
}结果集控制:FETCH..INTO..
}关闭游标:CLOSE
注意:使用for循环来遍历游标是游标的简洁使用形式。
   同时还可以使用绑定变量的方式声明游标可以达到重复使用的目的,提高游表性能;
   7.3 ref 游标
ref 游标专门为动态sql语句设计的
声明强类型的ref游标
TYPE my_curtype IS REF CURSOR
  RETURN stud_det%ROWTYPE;
order_cur my_curtype;
 
 declare
type cur_type is ref cursor;
cur cur_type;
rec scott.emp%rowtype;
str varchar2(50);
letter char:= 'A';
begin
loop
str:= 'select ename from emp where ename like ''%'||letter||'%''';
open cur for str;
dbms_output.put_line('包含字母'||letter||'的名字:');
loop
fetch cur into rec.ename;
exit when cur%notfound;
dbms_output.put_line(rec.ename);
end loop;
exit when letter='Z';
letter:=chr(ascii(letter)+1);
end loop;
end; 包含字母A的名字:
ALLEN
WARD
MARTIN
BLAKE
CLARK
ADAMS
JAMES
包含字母B的名字:
BLAKE
包含字母C的名字:
CLARK
SCOTT

  8.锁的简单使用

  8.1当修改数据前可以使用select ....for update  这样加上了一个行级排他锁,确保其他用户不能进行修改,但不会阻碍读。

行级排他锁:insert ,delete,update和select for update.

直到使用commit和rollback时会释放行级锁;

  SELECT … FOR UPDATE语法:
 SELECT … FOR UPDATE [OF columns]
[WAIT n | NOWAIT] [skip locked]
说明: OF 子句用于指定即将更新的列,即锁定行上的特定列,多表关联使用。
 WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待

 skip locked 不提示错误,申请的资源被锁定时放弃申请;
 
 
  9.oracle事务中注意的地方:

}在Oracle中,执行DDL语句(如Create Table、Create View等)时,会在执行之前自动发出一个Commit命令,并在随后发出一个Commit或者Rollback命令,也就是说,DDL会象如下伪码一样执行:
}
}Commit;
DDL_Statement;
  If (Error) then
  Rollback;
  Else
  Commit;
End if;
   10.函数中注意事项:
q定义函数的限制:
q函数只能接受 IN 参数,而不能接受 IN OUT 或 OUT 参数
q形参不能是 PL/SQL 类型
q函数的返回类型也必须是数据库类型
q访问函数的两种方式:
q使用 PL/SQL 块
q使用 SQL 语句
   11.触发器介绍
常用触发器为行级触发器,使用before或者after关联dml语句;
用于审计的ddl语句级触发器:如deleting,inserting,updating
用于审计的数据库级触发器:create or replace trigger trg_session before logoff  on database 
用于对于某些不能修改的视图操作的触发器,将对视图的操作转换为对表的操作:instead of

pl sql练习(4)的更多相关文章

  1. Oracle PL/SQL随堂笔记总结

    1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...

  2. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  3. PL/SQL连接错误:ora-12705:cannot access NLS data files or invalid environment specified

    适合自己的解决方法: 排查问题: 1. 你没有安装Oracle Client软件.这是使用PL/SQL Developer的必须条件.安装Oracle Client后再重试.2. 你安装了多个Orac ...

  4. PL/SQL循环

    1.if循环做判断 SET SERVEROUTPUT ON accept num prompt 'qinshuu'; DECLARE pnum NUMBER :=& num ; BEGIN T ...

  5. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  6. PL/SQL连接Oracle数据库,中文乱码,显示问号

    问题描述: 登陆PL/SQL,执行SQL语句后,输出的中文标题显示成问号????:条件包含中文,则无数据.         如果不是中文,需要修改注册表值,方法如下: 进入注册表:Win+r,输入re ...

  7. PL/SQL客户端中执行insert语句,插入中文乱码

    问题描述:在PL/SQL客户端中执行insert语句,插入中文乱码 解决方案: 1.执行脚本 select userenv('language') from dual;    结果为AMERICAN_ ...

  8. PL/SQL Developer如何连接64位的Oracle图解

    在64位Win7系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其他 ...

  9. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  10. pl/sql里的exists和in的差别

    项目中有个需要需要如下pl/sql(数据库是MariaDB) ) AS small FROM cmp_ent_main a WHERE createTime<'2016-9-21' ,,) ) ...

随机推荐

  1. sqlserver2008 中使用MSXML2.ServerXMLHttp拼装soap调用webservice

    要调用的接口方法:UP_ACC_inst_Info(string xml) 接口参数:xml格式的字符串 接口功能:传递人员编号.备注到接口进行更新,接口返回更新结果. 实例: declare @st ...

  2. Eclipse error:Access restriction

    报错:Access restriction: The method decodeBuffer(String) from the type CharacterDecoder is not accessi ...

  3. VLC的相关文档以及javascript接口

    参看下面链接:VLC相关文档

  4. hdu1466 计算直线的交点数

    题意: 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数. 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). 分析: DP 设状态:f[i][j]表示i条直线能否产生j个 ...

  5. 在Cocos2d-X中新建Android项目

    Windows下创建Cocos2d-X的Android项目并不复杂,关键是要改几个环境变量 一.进入Cocos2d-X主目录修改“create-android-project.bat” 大家都知道要点 ...

  6. DEDECMS织梦全站动态化访问(包括自由列表freelist)及发布内容时自动动态化设置

    DEDECMS织梦 - 全站已有内容全部设置为动态化访问(包括自由列表freelist),以及发布内容时自动为动态化,设置分为三个步骤: 1.将所有文档设置为“仅动态”:执行以下mysql语句:upd ...

  7. RESTful 架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  8. SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

    原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...

  9. 一个C#多线程的工作队列

    多线程添加元素到队列中,队列根据绑定 的事件进行自动处理,可以设置WorkSequential属性来实现对队列处理的单线程(严格顺序处理)或者多线程处理(循序出队,但是 多线程处理,不保证对队列元素的 ...

  10. 8个华丽的HTML5相册动画欣赏

    HTML5的图片动画非常丰富,我们也在网站上分享过很多关于HTML5的图片动画.相册在网络中也十分常见,本文我们要分享一些比较华丽的jQuery/HTML5相册动画,希望大家喜欢. 1.HTML5 3 ...