`
lfc_jack
  • 浏览: 145715 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Oracle中 关于数据库存储过程和存储函数的使用

 
阅读更多

存储过程和存储函数指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。
存储过程没有返回值。存储函数有返回值

  创建存储过程
      用CREATE PROCEDURE命令建立存储过程和存储函数。

      语法:
create [or replace] PROCEDURE过程名(参数列表) 
AS 
        PLSQL子程序体;

  存储过程示例:为指定的职工在原工资的基础上长10%的工资
 
/*
为指定的职工在原工资的基础上长10%的工资,并打印工资前和工资后的工资
*/
SQL> create or replace procedure raiseSalary(empid in number)
    as
    pSal emp.sal%type;--保存员工当前 工资
    begin
--查询该员工的工资
    select sal into pSal from emp where empno=empid;
--给该员工涨工资
    update emp set sal = sal*1.1 where empno=empid;
--打印涨工资前后的工资
    dbms_output.put_line('员工号:' || empid || '涨工资前
   ' || psal || '涨工资后' || psal*1.1);
    end;
 1  /

Procedure created
--存储过程调用
--方法一
SQL> set serveroutput on
SQL> exec raisesalary(7369);

员工号:7369涨工资前
800涨工资后880

方法二
    set serveroutput on
begin
 raisesalary(7369);
end;
/

PL/SQL procedure successfully completed

 
      存储函数
      函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。

     建立存储函数的语法:

CREATE [OR REPLACE] FUNCTION函数名(参数列表)
RETURN 函数值类型
AS
PLSQL子程序体;

 
示例:查询某职工的年收入。
SQL> /**/
    /* 
    查询某职工的总收入
    */
    create or replace function queryEmpSalary(empid in number)
    return number
   as
    pSal number; --定义变量保存员工的工资
    pComm number; --定义变量保存员工的奖金
   begin
   select sal,comm into psal,pcomm from emp where empno = empid;
   return psal*12+nvl(pcomm,0);
   end;
   /

Function created

   l   函数的调用

SQL> declare
    v_sal number;
    begin
    v_sal:=queryEmpSalary(7934);
    dbms_output.put_line('salary is:'|| v_sal);
    end;
    /

salary is:15600

PL/SQL procedure successfully completed

SQL> begin
    dbms_output.put_line('salary is:'|| queryEmpSalary(7934));
    end;
    /

salary is:15600

PL/SQL procedure successfully completed

 
       触发器
       数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

       触发器的类型
         语句级触发器
        在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。

         行级触发器(FOR EACH ROW)
        触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量,识别值的状态。

      创建触发器
CREATE  [or REPLACE] TRIGGER 触发器名
   {BEFORE | AFTER}
   {DELETE | INSERT | UPDATE [OF列名]}
   ON  表名
   [FOR EACH ROW [WHEN(条件) ] ]
   PLSQL 块

       示例1:限制非工作时间向数据库插入数据
SQL> create or replace
    trigger securityEmp
    before insert on emp
    declare
    begin
    if to_char(sysdate,'day')in('星期四','星期六','星期日')
    or to_number(to_char(sysdate,'hh24'))not between 8 and 18 then
    raise_application_error(-20001,'不能在非工作时间插入数据。');
    end if;
   end;
   /

Trigger created

触发语句与伪记录变量的值
触发语句
:old
:new
Insert
所有字段都是空(null)
将要插入的数据
Update
更新以前该行的值
更新后的值
delete
删除以前该行的值
所有字段都是空(null)
示例2:确认数据(检查emp表中sal的修改值不低于原值)
SQL> create or replace trigger checkSal
    before update of sal on emp
    for each row
    declare
    begin
    if :new.sal<:old.sal then
    raise_application_error(-20001,'更新后的薪水比更新前小');
    end if;
    end;
   /

Trigger created
运行后结果:
SQL> update emp set sal=260 where empno=7499;

update emp set sal=260 where empno=7499

ORA-20001: 更新后的薪水比更新前小
ORA-06512: 在 "SCOTT.CHECKSAL", line 4
ORA-04088: 触发器 'SCOTT.CHECKSAL'执行过程中出错

       触发器总结
      触发器可用于
•         数据确认 
•         实施复杂的安全性检查
•         做审计,跟踪表上所做的数据操作等

      查询触发器、过程及函数
•         Select * from user_triggers;
•         Select * from user_source;

分享到:
评论

相关推荐

    VFP调用ORACLE存储过程数据库接口程序.pdf

    在程序的实现过程中,执行VFP的execute函数和Fields(”XX”).value、INSERT等函数,将从Oracle数据库中获得的数据逐条送入VFP数据库中已存在的DBF表中。最终实现Oracle数据库内容向VFP数据表的自动转换。通过这种...

    Oracle中的函数、存储过程、包

    Oracle数据库系统中,函数、存储过程和包是重要的PL/SQL编程元素,它们在数据库管理和应用开发中扮演着核心角色。 1. **函数**: - **系统函数**:Oracle预定义的一系列函数,如SYSDATE获取当前日期,USER获取当前...

    oracle存储过程和函数PPT

    在Oracle数据库开发中,存储过程和函数以及PL/SQL语言是至关重要的组成部分。这篇内容将深入解析这些核心概念。 首先,我们来谈谈“存储过程”。存储过程是一组预编译的SQL语句,可以在数据库中保存并重复调用,以...

    Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作)

    在Oracle数据库中,存储过程和函数是重要的编程元素,用于执行复杂的数据库操作和业务逻辑。本篇文章将深入探讨这两个概念,并结合经典的SCOTT库中的EMP表进行实例操作。 **一、Oracle存储过程** 存储过程是一组预...

    oracle 数据库 plsql 存储过程

    ### Oracle数据库PL/SQL存储过程详解 #### 一、存储过程概述 **Oracle存储过程**是一种可以在Oracle数据库中存储并可被多次调用的PL/SQL代码块。它由一系列的PL/SQL语句组成,可以包含控制流程、变量声明等,能够...

    oracle 存储过程 函数 dblink

    在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程提高了代码的重用性和执行效率,同时也便于实现复杂的业务逻辑。 #### 二...

    java调用oracle存储过程或者函数

    在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...

    Oracle存储过程、游标、函数的详解

    函数是另一种在Oracle数据库中使用的编程组件,它可以接受输入参数并返回一个计算结果。 - **特点**: - 可以在SQL语句中调用。 - 必须返回一个值。 - 可以包含复杂的逻辑处理。 - **应用场景**: - 数据验证:...

    Oracle数据库存储过程技术文档.doc

    1.2存储函数(FUNCTIONE) 6 1.2.1 创建存储函数 6 1.2.2 删除存储函数 7 1.3 包(package) 7 1.3.1 包的基本结构 7 1.3.2 包的创建 7 1.3.3 调用包中元素 9 1.3.4 包的修改和删除 9 第二章 oracle存储过程基础――PL/...

    Oracle数据库存储过程.pdf

    Oracle数据库是关系型数据库管理系统的一种,广泛应用于大型企业级应用中。存储过程和触发器是Oracle数据库中重要的组件,它们是用于封装一系列...这些知识点对于理解和掌握Oracle数据库存储过程具有重要的指导意义。

    基于oracle数据库的PLSQL编程以及存储过程的创建和使用资料.zip

    通过深入学习和实践这些内容,开发者能够熟练掌握在Oracle数据库中使用PLSQL进行编程,并能有效地创建和管理存储过程,以提高数据库应用的效率和质量。在实际工作中,了解这些知识点对于数据库管理和开发工作至关...

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    java中调用oracle的存储过程和函数

    为了能够在Java中调用Oracle数据库中的存储过程和函数,首先需要确保以下条件得到满足: 1. **JDBC驱动**:确保项目中已经添加了Oracle的JDBC驱动(如ojdbc8.jar)。 2. **数据库连接**:配置好数据库连接信息,...

    使用VB调用oracle数据库存储过程的研究.pdf

    【VB调用Oracle数据库存储过程】在软件开发中,VB(Visual Basic)与Oracle数据库的结合使用非常常见。Oracle数据库是一种高效的关系型数据库系统,它提供了丰富的存储过程功能,能够预编译和存储复杂的SQL语句及...

    Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目).zip

    本资源“Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目).zip”提供了全面的学习材料,旨在帮助初学者和求职者提升在Oracle数据库中的SQL查询和存储过程编写技能。 SQL...

    oracle函数大全及存储过程语法.rar

    这个压缩包中的文档应该详细介绍了这些函数和存储过程的使用方法,包括语法示例、应用场景和最佳实践,对于学习和掌握Oracle数据库的开发和管理非常有帮助。通过深入理解和熟练应用这些函数和存储过程,你可以更高效...

    Oracle数据库--存储过程、函数、触发器和包.pptx

    【Oracle数据库存储过程】 Oracle数据库中的存储过程是一组预编译的SQL语句和PL/SQL代码,它们被组织在一起以完成特定的任务。存储过程的创建使用`CREATE PROCEDURE`语句,如: ```sql CREATE PROCEDURE procedure_...

    oracle存储过程函数生成DEMO

    综上所述,"Oracle存储过程函数生成DEMO"涵盖了Oracle数据库中关于存储过程和函数的基本概念、创建方法、调用方式以及可能涉及到的数据操作。通过学习和实践这个DEMO,开发者可以更好地理解和掌握如何在实际项目中...

Global site tag (gtag.js) - Google Analytics