oracleFUNCTION,PROCEDURE和PACKAGE区别

function 和procedure是PL/SQL代码的集合,通常为了完成一个任务。procedure 不需要返回任何值, 而function将返回一个值. 在另一方面,Package是为了完成一个商业功能的一组function和procedure的集合。

  1. 返回值:函数有一个返回值,通过return语句返回。而过程可以有0到N个返回参数,通过OUT或IN OUT参数返回。
  2. 调用方式:过程可以在语句中作为单独的语句执行。而函数在调用时,必须将返回结果赋值给一个变量。
  3. SQL语句:在SQL语句中,过程不能被调用,而函数可以直接调用。
  4. 类型说明:因为函数需要返回值,所以需要给函数设置类型说明,但过程没有做强制的规定。
  5. 编译:函数在创建时进行编译,以后每次执行都不需要重新编译。过程在创建时进行编译,以后每次执行都不需再重新编译。
  6. 包内元素:PACKAGE可以将存储过程分门别类,且可以在包内定义公共变量及类型,供包内存过使用。

综上,FUNCTION、PROCEDURE和PACKAGE在返回值、调用方式、SQL语句、类型说明、编译和包内元素等方面均存在差异。

下面是一个简单的Oracle FUNCTION、PROCEDURE和PACKAGE的例子:

FUNCTION例子

sql
CREATE OR REPLACE FUNCTION get_salary (emp_id IN NUMBER) RETURN NUMBER IS  
  salary NUMBER;  
BEGIN  
  SELECT salary INTO salary FROM employees WHERE id = emp_id;  
  RETURN salary;  
END get_salary;
这个函数接受一个员工ID作为输入参数,并返回该员工的工资。

PROCEDURE例子

sql
CREATE OR REPLACE PROCEDURE increase_salary (emp_id IN NUMBER, increase IN NUMBER) IS  
BEGIN  
  UPDATE employees SET salary = salary + increase WHERE id = emp_id;  
END increase_salary;
这个过程接受一个员工ID和一个增加的工资数作为输入参数,并将该员工的工资增加指定的数量。

PACKAGE例子

首先,创建一个包规范(PACKAGE SPECIFICATION):

sql
CREATE OR REPLACE PACKAGE emp_package AS  
  FUNCTION get_salary (emp_id IN NUMBER) RETURN NUMBER;  
  PROCEDURE increase_salary (emp_id IN NUMBER, increase IN NUMBER);  
END emp_package;
然后,创建包体(PACKAGE BODY):

sql
CREATE OR REPLACE PACKAGE BODY emp_package AS  
  FUNCTION get_salary (emp_id IN NUMBER) RETURN NUMBER IS  
    salary NUMBER;  
  BEGIN  
    SELECT salary INTO salary FROM employees WHERE id = emp_id;  
    RETURN salary;  
  END get_salary;  
    
  PROCEDURE increase_salary (emp_id IN NUMBER, increase IN NUMBER) IS  
  BEGIN  
    UPDATE employees SET salary = salary + increase WHERE id = emp_id;  
  END increase_salary;  
END emp_package;
这个包规范定义了两个对象:一个函数和一个过程。包体实现了这两个对象的具体逻辑。通过将相关的函数和过程组织到一个包中,可以方便地管理和维护相关的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第04章_IDEA的安装与使用(上)(认识,卸载与安装,JDK相关设置,详细设置,工程与模块管理,代码模板的使用)

文章目录 第04章_IDEA的安装与使用(上)本章专题与脉络1. 认识IntelliJ IDEA1.1 JetBrains 公司介绍1.2 IntelliJ IDEA 介绍1.3 IDEA的主要优势:(vs Eclipse)1.4 IDEA 的下载 2. 卸载与安装2.1 卸载过程2.2 安装前的准备2.3 安装过程2.4 注册2…

Java使用Netty实现端口转发Http代理Sock5代理服务器

Java使用Netty实现端口转发&Http代理&Sock5代理服务器.md 一、简介1.功能2.参数配置3.程序下载4.程序启动5.源码 一、简介 这里总结整理了之前使用Java写的端口转发、Http代理、Sock5代理程序,放在同一个工程中,方便使用。 开发语言&#xff1a…

【小笔记】算法训练基础超参数调优思路

【学而不思则罔,思维不学则怠】 本文总结一下常见的一些算法训练超参数调优思路(陆续总结更新),包括: batchsize学习率epochsdropout(待添加) Batch_size 2023.9.29 简单来说,较…

学习笔记之——3D Gaussian SLAM,SplaTAM配置(Linux)与源码解读

SplaTAM全称是《SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM》,是第一个(也是目前唯一一个)开源的用3D Gaussian Splatting(3DGS)来做SLAM的工作。 在下面博客中,已经对3DGS进行了…

基于springboot+vue的宠物领养系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 背景及意…

C++参悟:正则表达式库regex

正则表达式库regex 一、概述二、快速上手Demo1. 查找字符串2. 匹配字符串3. 替换字符串 三、类关系梳理1. 主类1. basic_regex 2. 算法1. regex_match2. regex_search3. regex_replace 3. 迭代器4. 异常5. 特征6. 常量1. syntax_option_type2. match_flag_type3. error_type 一…

DDD系列 - 第10讲 聚合

目录 一、聚合二、识别聚合2.1 完整性2.2 独立性2.3 纵览全局三、聚合与面向对象的关系四、聚合间的协作五、商品聚合示例一、聚合 介绍完实体和值对象,最后我们再来看看聚合的概念: 聚合是包含了实体和值对象的—个边界(代码层面的一个高内聚低耦合的包)聚合内包含的实体…

开发安全之:Cross-Site Scripting: Poor Validation

Overview 在 php 中,程序会使用 HTML、XML 或其他类型的编码,但这些编码方式并不总是能够防止恶意代码访问 Web 浏览器。 Details 使用特定的编码函数(例如 htmlspecialchars() 或 htmlentities())能避免一部分 cross-site scr…

Unity animator动画倒放的方法

在Unity中, 我们有时候不仅需要animator正放的效果,也需要倒放的效果。但我们在实际制作动画的时候可以只制作一个正放的动画,然后通过代码控制倒放。 实现方法其实很简单,只需要把animator动画的speed设置为-1即为倒放&#xff…

MySQL修炼手册11:事务处理:确保数据的一致性与完整性

写在开头 在探索数据管理的世界中,理解如何在数据库中使用事务处理,无疑是一项关键的能力。在处理复杂的数据库操作,尤其是在你试图在多个表或数据库中更新数据时,事务可以确保这些更改具有原子性、一致性、隔离性和持久性&#…

科技护航 智慧军休打通医养结合最后一公里

“小度小度,请帮我打电话给医生。” “好的,马上呼叫植物路军休所医生。” 2023年9月25日,常年独居、家住广西南宁市植物路军休所的军休干部程老,半夜突发疾病,让他想不到的是,这个常年伴他左右的“小度”…

Centos 8 安装 Elasticsearch

简介:CentOS 8是一个基于Red Hat Enterprise Linux(RHEL)源代码构建的开源操作系统。它是一款稳定、可靠、安全的服务器操作系统,适合用于企业级应用和服务的部署。CentOS 8采用了最新的Linux内核和软件包管理系统,提供…

Vue3新特性defineModel()便捷的双向绑定数据

官网介绍 传送门 配置 要求: 版本: vue > 3.4(必须!!!)配置:vite.config.js 使用场景和案例 使用场景:父子组件的数据双向绑定,不用emit和props的繁重代码 具体案例 代码实…

考试查分场景重保背后,我们如何进行可用性测试

作者:暮角 随着通过互联网音视频与知识建立连接的新学习方式在全国范围内迅速普及,在线教育/认证考试的用户规模呈井喷式增长。但教育容不得半点马虎与妥协,伴随用户规模不断增长,保证系统稳定性、有效避免千万考生考试时遭遇故障…

Ubuntu 在更新内核后 Virtual Box 不能为虚拟电脑打开一个新任务

前言 我也不知道啥时候自动给我更新了内核,重启电脑之后我的内核升级成6.5.0-14-generic,导致Virtual Box无法找到内核文件。 解决方法 方法1 sudo apt update sudo apt install linux-headers-generic build-essential dkms sudo apt remove virtua…

Elasticsearch:将数据从 Snowflake 摄取到 Elasticsearch

作者:来自 Elastic Ashish Tiwari 为了利用 Elasticsearch 提供的强大搜索功能,许多企业在 Elasticsearch 中保留可搜索数据的副本。 Elasticsearch 是一种经过验证的技术,适用于传统文本搜索以及用于语义搜索用例的向量搜索。 Elasticsearch…

Android音视频编码(3)

继续Android音视频编码(2)中的内容,在上一篇文章中,对视频解码和编码进行了详细的介绍,具体可参见这里。 视频解码 Surface播放 Overridepublic void start(){super.start();mediaCodec.setCallback(new MediaCodec.Callback() {Overridepub…

0121-1-计算机网络安全

计算机网络安全 1.Get 和 Post 的区别 结构:get 有请求体,post没有请求体 应用场景:get 用于获取数据,post用于提交数据; 缓存:get 的缓存保存在浏览器和web服务器日志中; 传输方式&#x…

Centos使用Docker搭建自己的Gitlab(社区版和设置汉化、修改密码、设置SSH秘钥、添加拉取命令端口号)

根据我的经验 部署Gitlab(社区版) 至少需要2核4g的服务器 带宽3~4M 1. 在自己电脑上安装终端:宝塔ssl终端 或者 FinalShell,根据喜好安装即可 http://www.hostbuf.com/t/988.html http://www.hostbuf.com/downloads/finalshell_w…

基于OpenSSL的SSL/TLS加密套件全解析

概述 SSL/TLS握手时,客户端与服务端协商加密套件是很重要的一个步骤,协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现,基本都是通过OpenSSL开源库,本文章就主要介绍下加密套件的含义以及如何在O…