视图
多表查询,如果表的关系比较复杂,那执行效率也变慢了,这就会给程序带来超时问题。所以,我们用视图解决这个问题。
格式:
Create [or replace ] view 视图名 as 多表关联语句
createorreplaceviewmyview
as select e.ename,e.job,e.sal,d.dnamefrom emp e,deptd;
权限:
Sqlplus / as sysdba; 以管理员身份登录
Show user; 查看当前用户
Grant create view toscott; 授予scott创建视图的权限
查询视图:
select*frommyview;
视图的好处:
1. 提高查询效率
2. 提高安全性
3. 我们可以定制查询结果,取消不必要字段
序列
可以理解为一个计数器。
createsequencemyseque;
select myseque.nextval fromdual;
createtablestudent(
idnumber,
namevarchar2(20)
)
insertintostudent(id,name)values(myseque.nextval,'zhangsan');
select*fromstudent;
索引
可以理解为书的页面
创建索引的必须条件:
最好是数值型,里面的值都不同
格式:create index 索引名 on 表名(字段名)
createindexnameindex on student(name);
同义词
格式:create synonym 同义词 for 原词
createsynonymabc for student;
select*fromabc;
同义词也有权限问题:
Sqlplus / as sysdba; 以管理员身份登录
Show user; 查看当前用户
Grant create synonym to scott; 授予scott创建视图的权限
触发器(trigger)
当某种情形发生的时候,触发器就执行一定plsql语句。
触发器分为行级触发器和语句级触发器
行级触发器:操作表中的每一行语句都会执行。
语句级触发器:每次操作,不管你操作多少行,只执行一次。
格式:create [or replace]trigger 触发器名字
[before|after] 定义触发器执行的时间
<insert |update|delete> 定义触发器执行的事件
On 表名|视图名
[for each row] 行级触发器
Begin
Plsql语句;
End;
在某个表里,每插入一条记录,我们就打印一句helloworld
createorreplacetriggermytrigger
after
insert
On student
foreachrow
Begin
dbms_output.put_line('hellowrld');
End;
非工作日的时候,不能在student表中插入数据
createorreplacetriggeraddrecodeNoRest
beforeinsertOnstudent
foreachrow
Begin
--判断今天是否是工作,如果不是,抛出异常
if(to_char(sysdate,'DAY')in('星期六','星期日','星期二'))
thenraise_application_error(-20001,'不能在休息日修改内容');
endif;
End;
存储过程(函数)
类似于java的方法
它是按照一定功能,把plsql语句整合在一起,形成代码块。
存储过程的特点是:可以有参数,但是必然有返回值。
格式:create or replace procedure 存储过程名
As
Begin
Plsql语句;
End;
打印HelloWorld
createorreplaceproceduresayHello
As
hello varchar2(20);
Begin
hello :='helloworld';
dbms_output.put_line(hello);
End;
带参数,根据输入的id,修改某人的工资+100
In 输入参数
Out 输出参数
Inout 输入输出参数
createorreplaceprocedureaddMoney(eno innumber)
As
esal emp.sal%type;
Begin
selectsal into esal fromemp where empno =eno;
updateemp set sal = esal+100whereempno= eno;
End;
测试代码:
begin
addMoney(7369);
end;
存储函数
在oracle比较早的版本中,我们使用存储函数,在比较新的版本中,我们使用存储过程。
所以说,存储函数和存储过程在本质是一样,只是因为历史原因,他们有些写法不同。
格式: create or replacefunction 函数名
As
Begin
Plsql语句
End;