oracle pl/sql学习笔记(二) 数据处理函数与对象

--组函数
max/min/avg/sum/count  max()用于字符型时按照字母表排序

decode(表达式,if1,then1,if2,then2,....,默认值)  多值判断
nvl()
rownum 只从1开始,有特殊需求请用子查询
cast(原数据 as  新类型数据)

between xx and xx
in()
like % _  escape '转义字符'指定转义字符
exists 存在性判断
all() 效果类似 max()
some()  any() 效果类似min()

--分析函数
select 列1,列2,rank() over(order by 列x)position from 表名
over(order by 列x)提供一个以列x为标准的排序窗口

dense_rank() 返回的排名不像rank()那样有并列
row_number()和rownum类似,但不像rownum那样可以使用索引

聚合函数(列...) over(partition by 列XX) 或者 over(partition by 列XX order by 列XX)  --给结果集分组
和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,没有多行对单行的问题

over(order by 列名 rows between 位移量 preceding and 位移量 following)
over(order by 列名 range between 列的差值 preceding and 列的差值 following)
preceding向前追溯,following向后追溯

与partition by 一起常用的分析函数
first_value() 已排序集合中中第一条记录相关的信息
last_value()  最后一条
lead(列名或列的表达式,向上的位移,如没有返回的默认值)
lag(列名或列的表达式,向下的位移,如没有返回的默认值)


--条件语句
if 条件 then xxx;
elseif 条件 then xxx;
else xxx;
end if;

case 变量/表达式
when 值1 then xxx;
when 值2 then xxx;
else xxx;
end case;

--循环语句
loop
XXXXX
[exit when 跳出条件;]
end loop;

while 条件判断 loop
XXXXX;
end loop;

for xxin 起始值..结束值 loop
xxx
end loop;


--视图
1、封装查询
2、灵活的控制安全性

create or replace view 视图名 as 查询语句 [with read only 只读视图]

也可通过update/insert/delete视图来修改数据,要注意列非空等约束


--创建基于不存在的数据表的视图
create or replace force view 视图名 as 查询语句

where 后面加with check option 创建视图约束,仅对insert和update有效


--创建基于不存在的数据表的视图
create or replace force view 视图名 as 查询语句

where 后面加with check option 创建视图约束,仅对insert和update有效

--对象
create or replace type 对象名 as object (
属性名 类型,                       
。。。。
member function 函数名,
menber procedure 过程名,
。。。。             
);     

create table 表名 of 对象名 利用对象类型来定义表结构

--插入数据
declare e 对象名
begin
e := 对象名(字段值...);
insert into 表名 values(e);
end;

注意,普通数据表是不能直接插入对象的,只有利用对象类型创建的数据表才可以插入对象

使用value()把id=1的一条数据实例化为一个对象,该对象的id+1后插入数据表
declare e 对象名
begin
select value(t) into e from 表名 t where e.id = 1;
e.id := e.id + 1;
insert into 表名 va
insert into 表名 values(e);
end;

--对象视图
create or replace view 视图名 of 对象名                          
with object oid(列名) 为对象视图指定对象标识符
as                                         
select ..... from 表名

select view_name, view_type  from user_views
where view_name = '视图名'


--关系视图插入数据
insert into 视图名 values(属性值);

--对象视图插入数据
insert into 视图名 values( 对象名(属性值...) );

--物化视图
提高数据库性能,根据查询定义将获得的结果集合存储到附属的数据表中,查询物化视图中的数据是oracel直接在附属表中获取数据
create materialized view 视图名 as 查询语句

create materialized view 视图名 build deffered  as 查询语句  创建物化视图时延迟加载查询结果数据

alter materialized viev 视图名 enable/disable query rewrite; 启用/关闭查询重写,数据查询时数据源自动指向匹配的物化视图

猜你喜欢

转载自cj2047.iteye.com/blog/1915503