百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

从零开始学习Oracle之存储过程(oracle存储过程入门)

sinye56 2024-10-09 19:38 7 浏览 0 评论

存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理。

1.创建存储过程

存储过程是指在Oracle数据库中,一组为了完成特定功能的 SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

在数据转换或查询报表时经常使用存储过程,它的作用是SQL语句不可替代的。

相对于直接使用SQL语句,在应用程序中直接调用存储过程有以下好处:

①减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量 可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条地调用SQL语句要高得多。

②执行速度更快。有两个原因:首先,在存储过程创建的时候,数据库已经对其进行 了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。

③更强的适应性。由于存储过程对数据库的访问是通过存储过程接口来进行的,因此 数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。

④分布式工作。应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。

创建存储过程,需要使用CREATEPROCEDURE语句,基本语法格式如下:

CREATE [OR REPLACE] PROCEDURE [schema.] procedure_name
  [parameter_name [[IN]datatype[{:=DEFAULT}expression]]
  {IS|AS}
BODY:
-------------分割线---------
CREATE PROCEDURE procedure_name
IS
BEGIN
  -- 存储过程的代码逻辑
END;
  • CREATE PROCEDURE为用来创建存储函数的关键字;
  • OR REPLACE表示如果指定的过程已经存在,则覆盖同名的存储过程;
  • schema表示该存储过程的所属机构;
  • procedure_name为存储过程的名称;
  • parameter_name为存储过程的参数名称;
  • [IN]datatype[{:=DEFAULT}expression]设置传入参数的数据类型和默认值;
  • {IS]AS}表示存储过程的连接词;
  • BODY:表示函数体,是存储过程的具体操作部分,可以用BEGIN.….END来表示SQL代码的开始和结束。
--存储过程名为HELLO
CREATE PROCEDURE HELLO
AS
BEGIN
--存储过程体仅输出一行字符串
dbms_output.put_line('您好,这是一个简单的存储过程');
END;

2.调用存储过程

直接调用存储过程的方法如下:

execute procedure_name;

也可以缩写成如下:

exec procedure_name;

在Oracle SQL Developer中调用存储过程,如果想让DBMS_OUTPUT.PUT_LINE成功输出,需要把SERVEROUTPUT选项设置为ON状态。默认情况下,它是OFF状态。

可以使用以下语句查看 SERVEROUTPUT 选项的状态:

SHOW SERVEROUTPUT

--如果是OFF状态,则显示以下信息:
SERVEROUTPUT OFF

--设置为ON状态的语句如下:
SET SERVEROUTPUT ON

在Oracle SQL Developer中运行下面的代码调用存储过程HELLO:

exec HELLO;

运行结果如下:

您好,这是一个简单的存储过程

另外,也可以在BEGIN....END中直接调用存储过程,调用语法如下:

BEGIN
procedure_name;
END;

3.查看存储过程

Oracle存储了存储过程的状态信息,用户可以查看已经存在的存储过程,还可以到视图USER_SOURCE中查看。

查看HELLO存储过程的SQL语句如下:

SELECT * FROM USER_SOURCE WHERE NAME='HELLO' ORDER BY LINE;

注意:在查看存储过程中,需要把存储过程的名称大写,如果小写,则无法查询到任何内容。如果想查看所有的存储过程,可以在ALLSOURCE视图中查询。

4.存储过程的参数

存储过程可以带参数,也可以不带参数。在数据转换时经常使用不带参数的存储过程。

4.1无参数的存储过程

在Oracle中,存储过程是一段预先编译好的可重复使用的PL/SQL代码块。存储过程可以接受参数,也可以不接受参数。

CREATE PROCEDURE procedure_name
IS
BEGIN
  -- 存储过程的代码逻辑
END;

4.2 有参数的存储过程

存储过程可以带有参数,使用参数可以增加存储过程的灵活性,为数据库编程带来很大的便利。存储过程的参数可以是常量、变量和表达式等。一旦为存储过程使用了参数,在执行存储过程时,必须指定对应的参数。

create [or replace] procedure 存储名 [(参数列表)] is|as
    声明变量语句段 ; 
begin 
    执行语句段 ; 
[Exception 
    异常处理语句段 ;]
end 过程名;

5.修改存储过程

在Oracle中,如果要修改存储过程,使用CREATE OR REPLACE PROCEDURE语句,也就是覆盖原始的存储过程。

修改存储过程HELLO,代码如下:

CREATE OR REPLACE PROCEDURE HELLO
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('这是修改后的存储过程');
END;

6.删除存储过程

删除存储过程,可以使用DROP语句,其语法结构如下:

DROP PROCEDURE [schema.] procedure_name

Schema 表示存储过程所属的机构;procedure_name为要移除的存储过程的名称。

删除存储过程HELLO,代码如下:

DROP PROCEDURE HELLO;

7.查看存储过程的错误

编写的存储过程难免会出现各种错误而导致编译失败,为了减少排查错误的范围,Oracle提供了查看存储过程错误的方法,语法结构如下:

SHOW ERRORS PROCEDURE procedure_name;

创建一个有错误的存储过程:SQL语句如下:

CREATE OR REPLACE PROCEDURE HELLO
AS
BEGIN
DBMM_OUTPUT.PUT_LINE('这是有错误的存储过程');
END;

查看错误的具体细节,代码如下:

SHOW ERRORS PROCEDURE HELLO;

结果如下:

从错误提示可以看出来,错误出现在第4行,正确的写法如下:

DBMS_OUTPUT.PUT_LINE('这是有错误的存储过程');

相关推荐

一个不错的软件版本命名规范!

之前写了一篇如何自动生成版本号的文章,《让你的C程序,自动打印版本信息》初衷是让自己的程序在运行时自动打印与版本相关的信息,避免测试时因为版本信息不确定导致的一些功能对应不上去的问题,当时留了一个坑,...

国产操作系统迎来发展风口 公务领域更能培育起Linux生态

谷歌和微软在俄罗斯市场的一番套路猛如虎,就让我们深刻地意识到了,只有自己的东西才能靠得住。也由此,国内操作系统发展迎来了发展风口。我就看到有朋友就秀出了他们单位采购的纯国产的主机,一款华为的主机,纯国...

5个大有“前途”的Linux桌面发行版本

ZD至顶网CIO与应用频道08月27日专栏:Linux无处不在。你的服务器里,你的电话、汽车、手表、烤面包机、冰箱……和台式机里都有Linux的身影。虽然在桌面上见到Linux的用户比在自动调温...

Linux 常用应用软件大全

编译自:https://www.fossmint.com/most-used-linux-applications/作者:MartinsD.Okoi译者:HankChow对于许多应用程序...

Linux 4.1 系列的最大版本 4.1.18 LTS发布,带来大量修改

(LCTT译注:这是一则过期的消息,但是为了披露更新内容,还是发布出来给大家参考)著名的内核维护者GregKroah-Hartman貌似正在度假中,因为SashaLevin2016年2月16日的...

Linux发行版需要杀软吗?卡巴斯基推出免费KVRT病毒扫描清理工具

IT之家6月4日消息,你认为使用Linux发行版,需要杀毒软件吗?或许很多用户认为Linux发行版偏小众,因此受到黑客攻击的风险也相对较小,不过卡巴斯基并不这么认为,近期推出了适用于...

适合开发人员的 5款 Linux 发行版

什么是Linux?Linux是基于Unix的操作系统。由LinusTorvalds开发于1991年首次发布其内核。因为Linux是开源软件,其发行版由不同组织发布,因此不同的发行版具有不同的风格...

VMware Workstation 17.0 Pro 发布:新增 TPM 2.0 完美兼容Win11

IT之家11月18日消息,VMwareWorkstation17.0Pro现已发布,它带来了许多新特性,例如微软Windows11硬性要求:虚拟可信平台模块(TPM)2.0。...

你是否需要一个容器专用的Linux发行版本?

单单使用容器是不够的,提供商们认为你需要一个容器专用的Linux发行版本。我们可以让容器在不同的操作系统上运行,不同的操作系统都有自己的虚拟化服务,如:SolarisZones、BSDJails、...

Tizen 3.0版本发布 采用Linux 4.1内核

2015-09-2111:31:39作者:马荣【中关村在线软件资讯】9月21日消息:尽管三星靠着Android系统设备在移动市场赚钱,但是仍然没有忘记自家的Tizen开发。现在Tizen3.0版...

欧拉操作系统演进:应用累计超130万套 支持鲲鹏、英特尔、飞腾等芯片

21世纪经济报道记者倪雨晴深圳报道4月15日,在欧拉开发者大会(openEulerDeveloperDay2022)的主论坛上,欧拉首个数字基础设施全场景长周期版openEuler22.03...

Papyros:以Material Design为灵感的Linux发行版本

项目团队并不希望只是采用传统的桌面主题,而是致敬谷歌Android系统的MaterialDesign设计语言想要打造出某些不同以往足够吸引用户的Linux发行版本,自然该版本还在不断的更新和改进中,...

比特网早报:全国空间计量技术委员会成立,银河麒麟操作系统上架微信Linux4.0.0版本

2024年11月6日消息,昨夜今晨,科技圈都发生了哪些大事?行业大咖抛出了哪些新的观点?比特网为您带来值得关注的科技资讯:全国空间计量技术委员会在北京成立近日,经市场监管总局批准,全国空间计量技术委员...

2024年最稳定的5个Linux发行版,赶紧收藏!

Linux是最流行的免费开源平台之一。Linux已被广泛使用,因为它安全、可扩展和灵活。Linux发行版收集开源代码,对其进行编译,并将其组合成一个可以轻松启动和安装的操作系统。它们还提供不同的...

彰显Linux生态繁华,Ubuntu、Fedora等四发行版同时发布新版本

上周对于开源社区来说是忙碌的一周。EndeavourOS和TrueNASScale于周二(4月16日)发布,Fedora于周三(4月17日)发布,Ubuntu于周四(4月18日)发布。四个新版本中都...

取消回复欢迎 发表评论: