PL/SQL对象,视图,序列,索引,同义词,触发器,存储过程(函数),存储函数

1 篇文章 0 订阅
1 篇文章 0 订阅

视图

多表查询,如果表的关系比较复杂,那执行效率也变慢了,这就会给程序带来超时问题。所以,我们用视图解决这个问题。

格式:

 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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值