#存储过程:封装在服务器上一段sql片段,已经编译好了的代码。

1.客户端调存储过程,执行效率就会非常高效。

语法:

create [or replace] procedure 存储过程名称

           (参数名  in|out 参数类型,参数名  in|out 参数类型)is  |  as

- - 声明部分

begin

- - 业务逻辑

end;

例子:

/*需求:给指定员工涨薪,并打印涨薪前后的工资

参数:in员工编号(用来接受输入) in 涨多少

声明一个变量:存储涨工资前的工资(因为不确定,所以用变量)  打印涨薪前的工资  更新工资

打印涨薪后的工资

*/

create or replace procedure pro_updatesal(vempno in number, vnum in number)

is

- -声明变量,记录当前工资

vsal number;

begin

    - -查询当前工资

         select sal into vsal from emp

         where empno=vempno;

    - -输出涨薪前的工资

         dbms_output.put_line(“涨薪前:”||vsal);

    - -更新工资

         update emp set sal=vsal+vnum

         where empno=vempno;

     - -输出涨薪后的工资

         dbms_output.put_line(“涨薪后:”||(vsal+vnum);

     - -提交事务

          commit;

end;

调用:

方法一:

- -在右边的小窗口中找到一个procedures,并在其中点相应文件点右键,单击view看错误提示。再选中再执行。

call proc_updatesal(7788,10);

- -再选中再执行。并在out中可以看到内容。

方法二:

begin

      call proc_updatesal(7788,-100);

end;

说明:7788是员工编号。

----------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

#存储函数:封装在oracle在服务器里面的plsql片段,

它是已经编译好的代码片段。

语法:

create [for replace] function 存储函数的名称(参数名 in|out 参数类型,参数名 in|out 参数类型)

return 参数类型

is | as

begin

end;

/*存储过程和函数的区别:

1.它们本质上没有区别

2.函数存在的意义是给过程调用 /*存储过程中调用存储函数*/

3.函数的返回类型在is | as上面定义

4.函数可以在sql里面直接调用

*/

例子:默认用in

/*查询指定员工的年薪

参数:员工的编号

返回:年薪

*/

create or replace function

 func_getsal(vempno number)

 return number

is

 - -声明变量,保存年薪

      vtotalsal number;

begin

          select sal*2+nul(comm,0) into vtotalsal

          from emp

          where empno=vempno; 

          return vtotalsal;

end; 

说明:into vtotalsal是表示赋值给 into vtotalsal,也就是年薪,并最后将年薪返回过来。

再然后选中并运行,然后可以看到左侧function中有对应的函数名,可以用view

查看是否有错误。

- -调用存储函数

declare

     vsal number;

begin

     vsal=func_getsal(7788); 

     dbms_output.put_line(); 

- -这里要有一个返回值

- -所以要声明一个返回值

end;

- -最后可以在output中看到结果。

- -函数可以在sql里面直接调用

select ename,func_getsal(empno)

from emp;

—存储过程

create or replace procedure proc_gettotalsal

(empmno in number,vtotalsal out number)

is

begin

      select sal*12+nvl(comm,0) into vtotalsal

      from emp

      where empno=vempno;

end;

declare

begin

       pro_gettotalsal(7788,vtotal);

       dbms_output.put_line(“年薪:”|| vtotal);

end;

----------------------------------------------------------------------------------------

说明:重复出变化,把同一东西做三次,好过把十个东西做一次。

----------------------------------------------------------------------------------------

#OracleNVL函数用法

从两个表达式返回一个非 null 值。

语法

  NVL(eExpression1, eExpression2)

参数

 eExpression1, eExpression2

如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。

eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。

----------------------------------------------------------------------------------------

oracle之存储过程和存储函数的使用和区别的更多相关文章

  1. 编程开发之--Oracle数据库--存储过程和存储函数(2)

    上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...

  2. 编程开发之--Oracle数据库--存储过程和存储函数(1)

    1.存储过程和存储函数 描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数 区别:存储函数可以通过return子句返回一个函数的值 (1)存储过程 语法:create [or re ...

  3. Oracle数据库---存储过程、存储函数

    --创建存储过程CREATE OR REPLACE PROCEDURE first_procISBEGIN DBMS_OUTPUT.PUT_LINE('我是过程'); DBMS_OUTPUT.PUT_ ...

  4. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  5. oracle存储过程和存储函数&触发器

    oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...

  6. oracle存储过程和存储函数

    存储过程 1.存储过程简介 下面先来简单介绍一下oracle的存储过程的语法,如下: create or replace procedure Tony_Process ( num in number, ...

  7. Oracle 存储过程以及存储函数

    以下的一些例子是基于scott用户下的emp表的数据,一和二使用的均为in,out参数,最后一个综合练习使用了 in out参数 一.存储过程 1.创建无参的存储过程示例  ------ hello ...

  8. 存储过程,存储函数(Oracle)

    存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 存储过程和存储函数的区别? 存储函数:可以通过return 语句返回函数值. 存储过程:不能 除此之外我们可以认为 ...

  9. day70-oracle 12-Java调用存储过程和存储函数

    我们现在调用的是存储过程和存储函数.用CallableSatement调用存储函数和存储过程. RDBMS:关系数据库.使用标准方式调用存储过程.也就是说:在mysql中调用和在oracle中调用的写 ...

随机推荐

  1. 获取spark-submit --files的文件内容

    参考https://community.hortonworks.com/questions/9265/how-can-i-add-configuration-files-to-a-spark-job- ...

  2. Nginx配置虚拟主机

    就是在一台服务器启动多个网站. 如何区分不同的网站: 1.域名不同 2.端口不同 在Nginx的安装目录的conf目录下有个配置文件nginx.conf 1.端口区分: 复制server节点,更改端口 ...

  3. vue中输入框聚焦,自动跳转下一个输入框

    比如 点击入库,el-dialog弹出来,然后自动聚焦第一个输入框,当输入框有值的时候,自动跳转下一个输入框 这个需求 直接上菜: this.$refs.lbj.focus()其实直接这么写也可以,但 ...

  4. Selenium基本使用(十一)异常捕获

    1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种 ...

  5. 1.Spring对JDBC整合支持

    1.Spring对JDBC整合支持 Spring对DAO提供哪些支持 1)Spring对DAO异常提供统一处理 2)Spring对DAO编写提供支持的抽象类 3)提高编程效率,减少DAO编码量 Spr ...

  6. oracle 常用(一)

    常用的6个分组函数: 注意点:where字句中不能使用组函数.要用到having函数. 但是从优化角度看,尽量使用where avg :平均值           sum:求和            ...

  7. 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义

    from:http://blog.csdn.net/feiyun0112/article/details/39697955 创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问 ...

  8. 学习笔记<2>Android基本四大组件

    <1>Activity(活动) ------与用户交互的界面 (1)Activity启动基本流程 <2>service(服务) <3>ContentProvider ...

  9. Python 6 -- 构建一个Web应用

    用Flask Web框架,实现浏览器页面交互.在此之前需要了解web的基本工作流程,可参照https://blog.csdn.net/m0_37466453/article/details/72752 ...

  10. mybatis oracle -批量插入,存在则更新

    <insert id="batchUpdatePBWUserInfo" parameterType="java.util.List"> MERGE ...