1、存储过程和存储函数

描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程、存储函数

区别:存储函数可以通过return子句返回一个函数的值

(1)存储过程

语法:create [or replace] PROCEDURE 过程名(参数列表)

AS

PLSQL子程序体;

存储过程的调用方式:

a)exec/execute 过程名();

b)begin

过程名();

过程名();

end;

/

带参数的存储过程:

举例:为指定的员工涨100块钱工资,并且打印涨前以及涨后的工资。

在sql developer中创建带参数的存储过程:

create or replace PROCEDURE raisesalary(eno in number)
as
--定义一个变量保存涨前的薪水
psal emp.sal%type;
begin
--得到员工涨前的薪水
select sal into psal from emp where empno=eno; --给该员工涨100
update emp set sal=sal+100 where empno=eno; --注意:一般不在存储过程或者存储函数中,commit和rollback。 --打印
DBMS_OUTPUT.PUT_LINE('涨前:'||psal||'涨后:'||(psal+100));
end;
/

使用sql developer调试调用plsql程序:

如果缺少权限,可以使用数据库超管赋予当前用户权限:

(2)存储函数

语法:

create [or replace] FUNCTION 函数名(参数列表)

return  函数值类型

AS

PLSQL子程序体;

举例:查询某员工的年收入

create or replace FUNCTION queryempincome(eno in number)
return number
as
--定义一个变量保存员工的薪水和奖金
psal emp.sal%type;
pcomm emp.comm%type;
begin
--得到员工的月薪和奖金
select sal,comm into psal,pcomm from emp where empno=eno; --直接返回年收入
return psal*12+nvl(pcomm,0);
end;
/

调试过程类似调试存储过程的步骤!

2、使用存储过程和使用存储函数的一条简单非必要原则:如果只有一个返回值,使用存储函数的return子句返回;如果有多个返回值,则使用存储过程通过out参数返回。

create or replace PROCEDURE queryempinform(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
as
begin
--得到员工的姓名、月薪、职位
select ename,sal,job into pename,psal,pjob from emp where empno=eno;
end;

  问题思考:

a)如果查询某人的所有字段信息(并且字段比较多),该如何解决?

b)如何返回多条符合条件的结果集,out参数可以返回结果集吗?

编程开发之--Oracle数据库--存储过程和存储函数(1)的更多相关文章

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

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

  2. 编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)

    在本系列学习随笔中的第2节我们留下了2个问题,我们现在讨论在out参数中使用光标. 1.要在out参数中使用光标,我们需要申明一个包的结构,包的结构分为包头和包体,包头只负责申明,包体只负责实现.包头 ...

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

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

  4. 编程开发之--Oracle数据库--存储过程使用动态参数绑定(3)

    1.动态参数绑定,可以实现动态的执行不同的sql --创建包 create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor; ...

  5. oracle之存储过程和存储函数的使用和区别

    #存储过程:封装在服务器上一段sql片段,已经编译好了的代码. 1.客户端调存储过程,执行效率就会非常高效. 语法: create [or replace] procedure 存储过程名称 (参数名 ...

  6. oracle数据库中的存储函数

    oracle中的存储函数,和系统内的函数类似,可以像调用系统函数一样调用存储函数.它与存储过程的唯一区别就是存储过程没有return返回值,存储函数可以与存储过程互换,存储函数可以在存储过程中调用. ...

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

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

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

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

  9. MySQL数据库之存储过程与存储函数

    1 引言 存储过程和存储函数类似于面向对象程序设计语言中的方法,可以简化代码,提高代码的重用性.本文主要介绍如何创建存储过程和存储函数,以及存储过程与函数的使用.修改.删除等操作. 2 存储过程与存储 ...

随机推荐

  1. Luogu 4726 【模板】多项式指数函数

    补补补…… 这个题的解法让我认识到了泰勒展开的美妙之处. 泰勒展开 泰勒展开就是用一个多项式型的函数去逼近一个难以准确描述的函数. 有公式 $$f(x)\approx g(x) = g(x_0) + ...

  2. Red Hat 6.5 网络yum源的配置

    第一次接触Linux系统,用虚拟机安装了一个rad hat6.5版本64位的,傻瓜式安装.安装好之后简单的写了一个C代码,进行gcc编译的时候,提示没有该命令,上网查找了一下说没有安装gcc编译器,用 ...

  3. jquery页面初始化控件时间

    this.InitControlTime = function () { if ($("#txt_Id_").val() == "") { var today ...

  4. Perl语言编程>>学习笔记

    1. 使用反引号可以调用外部程序并返回程序的输出, 如  $cwd = `pwd`; 2. Perl 中的变量类型之间的区别主要是单数和复数; 单数变量称为标量 $scalar , 复数变量称为数组 ...

  5. StackExchange.Redis实现Redis发布订阅

    由于ServiceStack.Redis最新版已经收费,所以现在大家陆陆续续都换到StackExchange.Redis上了,关于StackExchange.Redis详细可以参看Github htt ...

  6. RenderPage()加载局部页和传递数据

    System.Web.WebPages.WebPageBase类的方法public override HelperResult RenderPage(string path, params objec ...

  7. 37 有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位.

    题目:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. public class _037NumberOff { public st ...

  8. mybatis 存储过程调用

    接口 UserInfoMapper.java xml   UserInfoMapper.xml 如何关联 <?xml version="1.0" encoding=" ...

  9. 什么是awt ?

    http://docs.oracle.com/javase/6/docs/technotes/guides/awt/ Abstract Window Toolkit (AWT) The Abstrac ...

  10. pig(数据流语言和编译器)学习https://www.w3cschool.cn/apache_pig/apache_pig_execution.html

    当我们配置了hadoop集群执行的时候 可以通过命令ls进行查看 存储语法 STORE Relation_name INTO ' required_directory_path ' [USING fu ...