存储过程和函数可以放在同一个包下方便管理,如同java的package,了解了存储过程后就知道前辈是多么爽了,全都在sql里,不用像我们sql查出来还要用转成java对象进行逻辑处理。。
常用语法
- 存储过程创建CREATE OR REPLACE PROCEDURE 存储过程名(参数1 IN,参数2 OUT) is begin xxx end
- 存储过程有三种参数类型IN OUT INOUT,对应传入、传出、传入传出值。设置参数若没写具体类型则默认为IN类型
- 异常信息处理:raise 后跟异常 表示抛出 的异常,或者在异常内用 others then
- 游标cursor是最为关键的知识点,就是查询出来的结果集循环做操作,要了解它的多种定义与使用open、for循环,游标也可以设置传入参数
1、创建游标:cursor 游标名 is 结果集
2、打开游标 open 游标名 3、loop循环游标取数据 fetch 游标名 into 变量(一般 begin for 游标变量 in 游标 loop,用单个游标.属性来取数据 end loop end) 4、关闭游标 close 游标名
- %FOUND用法,可以和游标联合使用:游标变量%FOUND,若有数据则是true,同理也有%NOTFOUND
- for xx in(select * from table ) begin 一顿操作 end 也可以达到和游标相同效果
- 分析函数keep()的用法,取同一个分组下以某个字段排序后,对指定字段取最小或最大的那个值。一般用 聚合函数| max(column1) keep (dense_rank first或last order by column2) over (partion by column3),表示按照column2排序后的首个或最后数据再取聚合函数(column1)
- row_number()over() (partition by xx order by xx) num 分组再排序,以及和自带的rownum的区别:rownum 是结果集出来后排序的必须从1开始。
- goto 一个<标签>,能跳出循环,相当于 java里的break,不过要现在外层设置标签例如**<outter>**则可直接跳转出来
- 对于数据的操作:MOD ()求余数,round四舍五入,ceil向上取整,floor向下取整,trunc截取整数部分,abs绝对值
- order by 和 decode()连用,可以将不好排序的字段设置为数字进行排序,例如order by decode(字段A,'b',1,'c',2,3),字段A如果是b就是1,c就是2.否则是3这样就相当于字段A就是1,2,3这种顺序关系。
- if a= elseif a= end if判断条件语句
- := 赋值。 如 a:=3
- aa.bb%type 数据类型为aa表的bb字段的数据类型,这坨代码是定义变量时放变量后的
- reverse的用法,1..0 reverse 从1到0反向循环
- sign(表达式)函数,若表达式小于0返回-1,等于0返回0,大于0返回1
- decode用法,decode(a,'a',1,'b',2,3)。若a等于a则返回1,等于b则返回2 否则返回3。
- 外、左、右连接 用+的写法
- 正则表达式的用法