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. 纯css实现下拉菜单

    今天给大家分享一个纯html+css实现的下拉菜单.在此声明一点,源码并非出自本人之手,是同项目组一兄弟PLUTO写的.好东西嘛,所以果断拿出来和大家分享.如果有更好的想法或者建议,一定记得留言哦!好 ...

  2. mvc分页生成静态页,mvc生成静态页

    http://blog.csdn.net/xxj_jing/article/details/7899125 分页生成静态页 http://www.cnblogs.com/luanyilin/archi ...

  3. 数组,集合 转成DataTable 方法

    public static DataTable ToDataTable(IList p_List) { DataTable _DataTable = new DataTable(); if (p_Li ...

  4. [Python][MachineLeaning]Python Scikit-learn学习笔记1-Datasets&Estimators

    Scikit-learn官网:http://scikit-learn.org/stable/index.html Datasets 标准的数据集格式为一组多维特征向量组成的集合.数据集的标准形状(sh ...

  5. windows2008无线网卡和.net3.5安装

    今天在联想T420S笔记本上安装windows2008标准版,安装完成后部分驱动软件不能安装,要求.net framework3.5,下载.net3.5安装时提示应该用角色管理器安装. 根据提示打开服 ...

  6. 13年山东省赛 Boring Counting(离线树状数组or主席树+二分or划分树+二分)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 2224: Boring Counting Time Limit: 3 Sec   ...

  7. 高性能PHP日志插件--Seaslog

    日志系统作为记录系统运行的信息,包括 用户输入,安全日志等,日志系统是不能影响用户的使用. 为什么需要记录日志? 既然日志系统增加了整个系统的开销,为什么我还需要它,这是因为日志能帮我们记录运行的很多 ...

  8. WAMP下定义wordpress固定连接出现文章页面404

    在修改为如下设置后,一切更新正常,但回到博客主页访问单独文章时出现了404问题 最后一项改为index.php/%postname%后可正常访问,但是去掉那个php文件则不行. 找到的解决方法为:开启 ...

  9. Android中的消息机制:Handler消息传递机制

    参考<疯狂android讲义>第2版3.5 P214 一.背景 出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为 ...

  10. Path Sum 解答

    Question Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that addi ...