区别:1、存储过程用于在数据库中完成特定的操作或任务,而函数用于特定数据;2、存储过程的程序头部声明用PROCEDURE,声明时不需要返回类型,而函数的程序头部声明用FUNCTION,声明时要描述返回类型。
本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。
存储过程
存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。
优 点:
1、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2、当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3、存储过程可以重复使用,可减少数据库开发人员的工作量。
4、安全性高,可设定只有某用户才具有对指定存储过程的使用权。
存储过程与函数的区别
二者最大的区别是:
1).函数(function)总是向调用者返回数据,并且一般只返回一个值;2).存储过程(procedure)不直接返回数据,但可以改变输出参数的值,这可以近似看作能返回值,且存储过程输出参数的值个数没有限制。
从一般应用上来看,如果不需要返回值或者需要多个返回值,使用存储过程,如果只用一个返回值,就使用函数。
2、function定义中只能有DDL(如select等)语句;procedure中主要是DML语句(对数据库进行复杂操作时,如对多个表进行Update、Insert、Query、Delete时)。
如果想要使用select的结果集,则要使用游标
存储过程 |
函数 |
用于在数据库中完成特定的操作或任务(如插入、删除等) |
用于特定数据(如查询返回值) |
程序头部声明用PROCEDURE |
程序头部声明用FUNCTION |
程序头部声明时不需要返回类型 |
程序头部声明时要描述返回类型,而且PL/SQL块至少要包括一个有效的RETURN语句 |
可以使用IN/OUT/IN OUT3种参数模式 |
可以使用IN/OUT/IN OUT3种参数模式 |
可以作为独立的PL/SQL语句执行 |
不能独立执行,必须作为表达式的一部分调用 |
可以通过OUT/IN OUT返回零个或多个值 |
对过RETURN语句返回一个值,且该值与声明部分一致,也可以通过OUT类型的参数带出变量 |
SQL语句(DML或SELECT)中不可以调用存储过程 |
SQL语句(DML或SELECT)中可以调用函数 |
实际举例
1、函数
(1)创建函数
create or replace function get_salary( dept_no number, emp_count **out** number) return number IS v_sum number;begin ...exception ...end get_salary
(2)调用函数
declare v_num number; v_sum number;begin ...(这里应该出现函数名表示调用)end
2、存储过程
(1)创建存储过程
create or replace procedure pro_demo( dept_no number default 10, sal_sum out number, emp_count out number) IS begin ... exception ... end proc_demo;
(2)调用存储过程
调用语法:
1)、exec 19e474336c87d7900fc91269f8956694;
2)、execute 19e474336c87d7900fc91269f8956694;
3)、在PL/SQL语句块中直接调用。
例如:
declare v_num number; v_sum number(8,2); begin procedure pro_demo(dept_no=>1,sal_num=>900,emp_count=>10)(这里出现存储过程名表示调用,传递参数值用=>) end;
3、本地存储过程
在PL/SQL中还可以在declare块中建立本地存储过程,而不使用关键字create,其目的是:不用将存储过程存储在数据库中,避免更改数据库时带来的麻烦,其主要的使用场景是,临时使用某个存储过程,而不是在以后要重复多次使用。
例子:
declare v_num number; v_sum number(8,2); procedure proc_demo( dept_no number default 10, sal_sum out number, emp_count out number) IS begin ...(这里不用出现存储过程名) exception ... end proc_demo;
推荐教程:《Oracle教程》
以上是oracle中存储过程与函数的区别是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Atom编辑器mac版下载
最流行的的开源编辑器