概述

说句实在的,平时工作基本上不会去背啥创建存储过程、创建函数、创建包之类的语法,但是相信大家面试啥的却基本会笔试这些,所以就对存储过程、函数和包的语法做下总结,也做个备忘!这里面语法大家理解就可以了,能记住最好...


一、Oracle创建存储过程(procedure)

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,它大大提高了SQL语句的功能和灵活性。存储过程编译后存储在数据库中,所以执行存储过程比执行存储过程中封装的SQL语句更有效率。

1、基本语法

create or replace procedure update_emp_sal(Name in out type, Name in out type, ...) isbegin end update_emp_sal;

2、实例:

2.1、修改emp表的ename字段

create or replace procedure update_emp(v_empno varchar2,v_ename varchar2) isbeginupdate emp set ename=v_ename where empno=v_empno; end update_emp;

调用方法如下:

SQL>exec update_emp('7934','test');

2.2、有返回值的存储过程:简单的返回empno=7934的sal值

create or replace procedure emp_out_sal(v_empno in varchar2, v_sal out number) is vsal number(7, 2);begin select sal into vsal from emp where empno = v_empno; v_sal := vsal;end;

调用有返回值的过程

SQL> var vsal numberSQL> exec emp_out_sal('7934',:vsal);

二、Oracle创建函数(function)

1、基本语法:

create or replace function (Name in type, Name in type, ...) return number is Result number;begin return (Result);end ;

2、实例

2.1、查询出ename=SCOTT的工资

create or replace function ret_emp_sal(v_ename varchar2) return number is v_sal number(7, 2);begin select nvl(sal, 0) into v_sal from emp where lower(ename) = lower(v_ename); return v_sal;end;

调用此函数:

SQL> var vsal numberSQL> call ret_emp_sal('SCOTT') into :vsal; Method calledvsal---------3000

三、Oracle创建包(package)

包用于组合逻辑相关的过程和函数,它由包规范和包体两个部分组成。包规范用于定义公用的常量、变量、过程和函数,创建包规范可以使用CREATE PACKAGE命令,创建包体可以使用CREATE PACKAGE BODY。

1、创建包规范:

create package emp_pkg is procedure emp_update_ename(v_empno varchar2, v_ename varchar2); function emp_get_sal(v_empno varchar2) return number;end;

2、创建包体

create or replace package body emp_pkgis procedure emp_update_ename ( v_empno varchar2, v_ename varchar2 ) is vename varchar2(32); begin  update emp set ename=v_ename where empno=v_empno; commit; select ename into vename from emp where empno=v_empno; dbms_output.put_line('雇员名称:'||vename);  end;  function emp_get_sal ( v_empno varchar2 ) return number is vsal number(7,2); begin select sal into vsal from emp where empno=v_empno; return vsal; end;end;

在此提示,在没有创建包规范就创建包体,会失败,要使用包,必须先创建包规范,然后在创建包体。

当要调用包的过程和函数时,在过程和函数的名称前加上包名作为前缀(包名.子程序名称),而如果要访问其他方案的包时需要在包的名称前加上方案的名称(方案名称.包名.子程序名称)

3、调用包

SQL> var vsla numberSQL> call emp_pkg.emp_get_sal('7934') into :vsla;SQL> set serveroutput on;SQL> exec emp_pkg.emp_update_ename('7934','huangweibo');SQL> call emp_pkg.emp_update_ename('7934','huangweibo');SQL> select * from dual;

存储过程和函数本质上没区别。只是函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。执行的本质都一样,也可以理解函数是存储过程的一种。而包里面有多个存储、函数,当某类存储,或者函数,都是为某一项目的设计的,可以把它们放在一个包里面,这样便于管理。

后面会分享更多DBA方面内容,感兴趣的朋友可以关注下!

(2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...相关推荐

  1. oracle中调试存储过程,详解Oracle调试存储过程

    详解Oracle调试存储过程 一 调试关键步骤 1.在要调试的存储过程右键,选择编辑以进行调试,截图如下: 2.点击小瓢虫,弹出调试窗口,截图如下: 3.输入7839员工编号,点击确认,进行调试,截图 ...

  2. oracle调试存储过程加断点,详解Oracle调试存储过程

    详解Oracle调试存储过程 一 调试关键步骤 1.在要调试的存储过程右键,选择编辑以进行调试,截图如下: 2.点击小瓢虫,弹出调试窗口,截图如下: 3.输入7839员工编号,点击确认,进行调试,截图 ...

  3. colsure php_PHP_PHP中Closure类的使用方法及详解,Closure,匿名函数,又称为Anonym - phpStudy...

    PHP中Closure类的使用方法及详解 Closure,匿名函数,又称为Anonymous functions,是php5.3的时候引入的.匿名函数就是没有定义名字的函数.这点牢牢记住就能理解匿名函 ...

  4. oracle call 存储过程 带out_详解oracle数据库存储过程调试方法

    概述 虽然现在存储过程相对比较少用了,但是平时接触不可避免的要跟存储过程打交道,当需要自己写的时候总会碰到这或那的错误,这个时候一般要怎么调试呢? PL/SQL调试 PL/SQL中提供了[调试存储过程 ...

  5. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  6. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  7. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  8. python中__init__后面加特殊符号_详解Python中的__new__、__init__、__call__三个特殊方法...

    __new__: 对象的创建,是一个静态方法,第一个参数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是sel ...

  9. java中bean的定义有哪些_详解Java的Spring框架中bean的定义以及生命周期

    bean的定义形成应用程序的骨干是由Spring IoC容器所管理的对象称为bean.bean被实例化,组装,并通过Spring IoC容器所管理的对象.这些bean由容器提供,例如,在XML的定义, ...

最新文章

  1. MPB:中科院城环所杨军组-​​淡水浮游细菌群落采集、过滤与保存
  2. python3精要(62)-编译与解释实践(1)
  3. linux定时备份mysql数据库文件脚本
  4. 【渝粤教育】国家开放大学2018年春季 0434-22T高级英语口语 参考试题
  5. C++const的多种用法
  6. 一文读懂 | 进程怎么绑定 CPU
  7. linux 下安装maven
  8. 又是系统时间惹的祸 TreeView
  9. 计算机多系统启动光盘制作,制作启动光盘,详细教您如何制作光盘启动盘
  10. java常用框架集合
  11. 无线网络技术导论知识点
  12. 【2019/02/18测试T3】飘雪圣域
  13. 解决在x86平台装openwrt旁路由大流量断网问题(intel网卡驱动bug问题)
  14. 如何防止数据库的编码格式跟项目编码格式不一致产生乱码, 怎么让数据库的编码格式跟项目编码格式保持一致
  15. debussy相关资料(持续更新。。。)
  16. 开箱即用,Hexo博客的github+server自动部署
  17. 百度地图添加家的位置图文教程
  18. 人脸识别、深度学习优秀设计(毕业专业指导)
  19. 信息编码 — 进大厂必备底层能力之一(文末有彩蛋)
  20. 〖经典怀念〗新白娘子传奇MV之青姐17部完整原版下载

热门文章

  1. select每门可说大于90分_数据库原理与应用期末试题及其答案
  2. abapdata定义方法_ABAP中用函数定义后台作业的一个程序
  3. java invocationtarget,Java异常处理之java.lang.reflect.InvocationTargetException
  4. MySQL实现分页查询
  5. Cesium多屏展示
  6. bash 后台程序_如何向您的Bash程序添加帮助工具
  7. word2010赠送_我们将赠送两台LulzBot 3D打印机
  8. 拒绝offer的理由_接受拒绝的3大理由
  9. 加入docker管理员_如何使系统管理员和开发人员同意Docker
  10. (27)css3 2D转换综合案例—卡包效果