Oracle--存储过程、触发器

一、存储过程

存储过程是一种命名的PL/SQL程序块
存储过程保存在数据库中,因为是已经编译好的代码,所以在被调用时,其执行效率非常高

存储过程的参数种类:
   1. in 输入参数(默认)
   2. out 输出参数

   3.  in out 输入输出参数

1、创建存储过程

create [or replace] procedure pro_name [(parameter1[,parameter2]…)] is|as
begin
  plsql_sentences;
[exception]
  [dowith _ sentences;]
end [pro_name];

2、调用存储过程

调用存储过程一般使用EXECUTE语句,但在PL/SQL块中可以直接使用存储过程的名称来调用。语法格式:

[exec|execute] procedure_name

3、存储过程的删除

 当一个过程不再需要时,要将此过程从内存中删除,以释放相应的内存空间,可以使用下面的语句:

DROP PROCEDURE count_num;
1.使用存储过程插入dept表一条记录(无参存储过程)。
  create or replace procedure dept_proc is
    var_dname dept.dname%type;
  begin
    var_dname:='总裁部';
    insert into dept values(95,var_dname,'中国');
    commit;
  end;
  /v
  
2.使用存储过程查询指定编号的员工信息(使用了in参数)。
  create or replace procedure empno_proc(var_empno in int) is
  type emp_record is record(
      var_ename emp.ename%type,
      var_job   emp.job%type
  );
  empinfo emp_record;
  begin
     select ename,job into empinfo from emp where empno=var_empno;
     dbms_output.put_line(var_empno||'工号的员工姓名是:'||empinfo.var_ename||
        ',职位是:'||empinfo.var_job);
  end;
  /

3.根据员工编号查询其姓名(使用了out参数)
  create or replace procedure 
        empno_proc(var_empno in int,var_ename out varchar2) is
  begin
     select ename into var_ename from emp where empno=var_empno;
  end;
  /

  在PL/SQL中调用存储过程:
  declare
      var_good emp.ename%type;
  begin    
     empno_proc(7369,var_good);
     dbms_output.put_line('查询到的姓名为:'||var_good);
  end;
  /

4.使用in out类型参数根据工号查询工资。
  create or replace procedure emp_proc(var_info in out number) is
  begin
    select sal into var_info from emp where empno=var_info;
  end;
  /

  在PL/SQL中调用该存储过程:
  declare
    var_emp_info number:=7369;
  begin
    emp_proc(var_emp_info);
    dbms_output.put_line('该工号的员工工资是:'||var_emp_info);
  end;
  /

二、触发器

1、创建触发器

create [or replace] trigger tri_name
  [before | after | instead of] tri_event
  on table_name | view_name | user_name | db_name
  [for each row [when tri_condition]
begin
plsql_sentences;
end tri_name;

加上for each row 为行级语句,即为SQL语句影响多少行,触发多少次;

如果不加for each row为语句级,即为有几个SQL语句触发几次。


当一个触发器不再使用时,要从内存中删除它。语法:

删除:DROP TRIGGER my_trigger;

当一个触发器已经过时,想重新定义时,不必先删除再创建,同样只需在CREATE语句后面加上OR REPLACE关键字即可。如:

重新定义:CREATE OR REPLACE TRIGGER my_trigger;

1.使用触发器监听对dept表的操作,并记录到日志表中。
建立日志表:
create table dept_log(
   opertime   date,
   operdesc   varchar2(50)
);

创建触发器:
create or replace trigger dept_trigger
  after insert or update or delete 
  on dept for each row
  begin
     if inserting then
        insert into dept_log values(sysdate,'执行了insert操作');
     elsif updating then
        insert into dept_log values(sysdate,'执行了update操作');
     elsif deleting then
        insert into dept_log values(sysdate,'执行了delete操作');
     end if;
  end;
  /

三、游标

1、显示游标

    显示游标是由用户声明和操作的一种游标,通常用于操作查询结果集(即由SELECT语句返回的查询结果),使用它处理数据的步骤包括:声明游标、打开游标、读取游标和关闭游标4个步骤。其中读取游标可能是个反复操作的步骤,因为游标每次只能读取一行数据,所以对于多条记录,需要反复读取,直到游标读取不到数据为止,其操作过程如图所示。

(1)声明游标语法

declare cursor cur_name

       is 

       select_ sentence;

(2)打开游标语法


(3)读取游标语法


(4)关闭游标语法


2、隐式游标

        在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域。隐式游标主要是处理数据操纵语句(如,UPDATE、DELETE语句)的执行结果,当然特殊情况下,也可以处理SELECT语句的查询结果。由于隐式游标也有属性,当使用隐式游标的属性时,需要在属性前面加上隐式游标的默认名称——SQL。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值