oracle中存储过程详解

Oracle之存储过程 所谓存储过程(),就是一组用于完成特定数据库功能的SQL,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。 阅读详情
一、oracle中存储过程的使用


过程是指用于执行特定操作的PL/SQL块。如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程。通过使用过程,不仅可以简化客户应用的开发和维护,而且可以提高应用程序的运行机能。
一、 使用过程参数
当建立过程时,既可以指定过程参数,也可以不提供任何参数。过程参数包括输入参数、输出参数和输入输出参数,其中输入参数(IN)用于接收调用环境的输入数据,输出参数(OUT)用于将输出数据传递到调用环境,而输入输出参数(IN OUT)不仅要接收输入数据,而且还要输出数据到调用环境。建立过程是使用CREATE OR REPLACE PROCEDURE命令来完成的,语法如下:
CREATE [OR REPLACE] PROCEDURE PROCEDURE_name
    (argument1 [mode1] datatype1,argument2 [mode2] datatype2, …)
IS [AS]
PL/SQLBlock;
如上所示,procedure_name 用于指定过程名,argument 用于指定过程参数,IS 或 AS用于开始PL/SQL块。注意,当定义参数时,只能指定数据类型,不能指定长度。下面通过例子说明建立过程,并使用各种过程参数的方法。
1建立无参数的过程   
下面以建立用于输出当前日期和时间的过程OUT_TIME为例,说明建立无参数过程的方法。
create or replace procedure out_time
is
begin
dbms_session.set_nls('nls_date_format','''yyyy_mm_dd hh24:mi:ss''');
dbms_output.put_line(sysdate);
end; 
/
2 建立带有输入参数的过程
通过使用输入参数,可以将应用程序数据传递到过程。当定义过程参数时,默认参数模式是输入参数,另外可以使用IN关键字显式定义输入参数。下面以建立用于增加雇员的过程ADD_EMP为例,说明建立具有输入参数过程的方法。
create or replace procedure add_emp(
empno employee.empno%type,
ename employee.ename%type,
job employee.job%type,
sal employee.sal%type,
comm employee.comm%type,
deptno employee.deptno%type)
is
begin
insert into employee
values(empno,ename,job,sal,comm,depno);
end;
/
3 建立带有输出参数的过程
通过在过程中使用输出参数,可以将数据或消息传递到调用环境和应用程序。当定义输出参数时,需要指定参数模式OUT。下面以用于更新雇员工资并输出雇员姓名的过程UPDATE_SAL为例,说明带有输出参数过程的方法。
create or replace procedure update_sal(
eno number,salary number,name out varchar2) is
begin
update employee set sal=salary where empno=eno
returning ename into name;
end;
/
4 建立带有输入输出参数的过程
通过在过程中使用输入输出参数,可以在调用过程时输入数据到过程,在调用结束后输出数据到调用环境和应用程序。当定义输入输出参数时,需要指定参数模式为IN OUT。下面以建立用于计算两数相除结果的过程DIVIDAL为例,说明建立带有输入输出参数过程的方法。
create or replace procedure divide
(num1 in out number,num2 in out number) is
v1 number;
v2 number;
begin
v1:=trunc(num1/num2);
v2:=mod(num1,num2);
num1:=v1;
num2:=v2;
end; 
/


二、 调用过程
当在SQL*PLUS中调用过程时,需要使用CALL或者EXCUTE命令,而在PL/SQL块中过程可以直接引用。当调用过程时,如果过程无参数,那么直接引用过程名;如果过程带有输入参数,那么需要为输入参数提供数据值;如果过程带有输出参数,那么需要使用变量接收输出结果;如果过程带有输入输出参数,那么在调用时需要使用具有值的变量。当为参数传递变量或者数据时,可以采用位置传递、名称传递和组合传递三种方法。下面通过示例说明调用过程的各种方法。
1 调用无参数的过程
当调用无参数的过程时,直接引用过程名即可。下面以调用过程OUT_TIME为例。说明使用无参数过程的方法。
exec out_time
2008_04_03 19:54:39
2 调用带有输入参数的过程
当调用带有输入参数的过程时,需要为输入参数提供数据值。下面以调用过程ADD_EMP增加雇员MARY为例,说明调用带有输入参数的方法。
exec add_emp(12,’MARY’,’销售人员’,2000,500,4)
3 调用带有输出参数的过程
当调用带有输出参数的过程时,需要使用变量接受输出参数的数据值。下面以调用过程UPDTAE_SAL为例,说明调用带有输出参数过程的方法。
declare
      v_name employee.ename%type;
    begin
      update_sal(&eno,&salary,v_name);
      dbms_output.put_line('姓名:'||v_name);
    end;
/
输入eno 的值:2
输入salary的值:1500
姓名:李丽
4 调用带有输入输出参数的过程
当调用带有输入输出参数的过程时,在调用之前需要定义变量存放输入值,并且在调用结束之后使用变量输出数据。下面以调用过程DIVIDE为例,说明调用带有输入输出参数过程的方法。
declare
n1 number:=&n1;
   n2 number:=&n2;
begin
divide(n1,n2);
dbms_output.put_line('商:'||n1||',余数:'||n2);
end;
/
输入n1的值:10
输入n2的值:3
商:3,余数:1
5 使用位置传递为参数传递变量和数据
位置传递是指按照参数定义顺序依次为每个参数提供变量或者数据值。当使用位置传递时,必须为所有参数提供变量或者输入数据。下面以调用过程ADD_EMP增加雇员MIKE为例,说明调用带有输入输出参数过程的方法。
call add_emp(13,’MIKE’,’程序员’,2000,500,1)
6 使用名称传递为参数传递变量和数据
名称传递是指按照参数名为其提供变量或者数据。当使用名称传递时,需要使用关联符号“=>”为参数提供变量或者数值。下面以调用过程ADD_EMP增加雇员JOHN为例,说明调用带有输入输出参数过程的方法。
exec add_emp(empno=>16,ename=>’JOHN’,job=>NULL,sal=>NULL,deptno=>null)
7 使用组合传递为参数传递变量和数据
组合传递是指在调用子程序时结合使用位置传递和名称传递.下面以调用过程ADD_EMP增加代码为4444、姓名为AGASI的雇员为例,说明调用组合传递的方法。
Exec add_emp(4444,’AGASI’,’CLERK’,null,sal=>1200,comm.=>0,deptno=>5)


三、 维护过程
1 删除过程
使用DROP PROCEDURE命令可以删除过程。
DROP PROCEDURE add_department;
2 显示编译错误
     当建立过程时,如果编译成功,则会显示消息“过程已建立”,否则会显示消息“警告:创建的过程有编译错误。”为了确定错误原因以及错误所在行,可以查询数据字典USER?_ERRORS,或者执行SHOW ERRORS命令。
SQL> show errors
Errors for PROCEDURE TEST.ADD_EMP:
     
LINE/COL ERROR
-------- --------------------------------------------
2/42     PLS-00302: 必须说明 'ENAME5' 组件
0/0      PL/SQL: Compilation unit analysis terminated
3确定过程状态
当使用ALTER TABLE 命令改变表结构时,会将基于该表的子程序改为INVALID状态。为了确定处于INVALID状态的对象,可以查询数据字典USER_OBJECTS。下面以列出处于INVALID状态的所有的过程名为例,说明使用该数据字典的方法。
select object_name from user_objects
    where status='invalid' and object_type='procedure';
OBJECT_NAME
--------------------------------------------------------------------------
GET——EMP
4 编译过程
     为了避免过程的运行错误,应该重新编译处于INVALID状态的过程,使用ALTER PROCEDURE 命令可以编译过程。
     ALTER PROCEDURE get_emp COMPILE;
5 查看过程代码
     通过查询数据字典USER_SOURCE,可以取得当前用户所拥有的子程序名称以及源代码。下面以显示过程OUT_TIME的源代码为例,说明使用该数据字典的方法。
     
select text from user_source where name=upper('out_time');


TEXT
----------------------------------------------------------------procedure out_time
is
begin
dbms_session.set_nls('nls_date_format','''yyyy_mm_dd hh24:mi:ss''');
dbms_output.put_line(sysdate);
end;
Oracle-存储过程 oracle中存储过程各种写法 阅读详情

相关推荐

ORACLE进阶(七)存储过程详解_oracle存储过程实例详解

as //定义(游标一个可以遍历的结果集)begin //执行(常用For语句遍历游标)END LOOP;–显示cursor的处理declare—声明cursor,创建和命名一个sql工作区begin—打开cursor,执行sql语句产生的结果集–提取cursor,提取结果集中的记录–关闭cursorend;

m0_61331573的博客 1361

Oracle的存储过程基本写法

目录 1.1,Oracle存储过程简介:  1.2,创建存储过程的语法: 2.0,游标的使用,看到的一段解释很好的概念,如下: 1.1,Oracle存储过程简介:    存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作, 减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 优点: 允许模块化程序...

c851204293的博客 1万+

OneNET物模型实战:如何用NB-IOT模块上传JSON数据并解析

本文详细介绍了如何利用NB-IOT模块将传感器数据上传至中国移动OneNET物联网平台,并利用其物模型功能实现JSON数据的自动解析。文章从理解OneNET物模型与OneJson协议入手,逐步讲解了平台侧物模型创建、设备注册,以及设备端数据构造、HEX编码与NB-IOT模块AT指令上报的全流程,并提供了关键的调试技巧与常见问题排查方法,为物联网开发者提供了完整的实战指南。

sugar的博客 681

Oracle存储过程

使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型,使用%TYPE是非常好的编程风格,因为引用型变量更加灵活。

猪之仆的博客 6542

Cadence学习之路:什么是PCB工艺的正片与负片

正片??负片??Flash焊盘的创建与使用

qq_46757048的博客 4245

仪表数字图像识别的传统方法

虽然现有很多机器学习算法能够准确地识别数字,但是传统方法对于一些需要离线识别且计算能力有限的下位机设备来说,仍然有非常不错的效果。因此,今天就向大家讲解一下传统的数字识别方法在仪表读数方面的应用。 1.图像预处理技术 1.1 主要流程 图像处理依次需要进行图片预处理、字轮区域定位、字符分割和字符识别等过程。其中图像处理流程如下图所示。 2. 详细过程 2.1 灰度化 为了减小图像原始数据量,本系...

XYZ 4523

Oracle学习之存储过程

存储过程 即是将具有某种特定功能的SQL语句集,存储在数据库中,一次编译后续直接使用不在编译。用户通过存储过程的名字并给出参数来调用存储过程。

ssauuuuuu的博客 4903

VS2022离线安装总闪退?可能是这个--noWeb参数没加对(完整参数指南)

本文深入解析了VS2022离线安装过程中常见的闪退问题,指出核心原因往往在于命令行参数使用不当,特别是`--noWeb`参数。文章提供了完整的参数使用指南和实战解决方案,包括证书处理、安装器文件修复及自动化脚本,帮助用户彻底解决离线部署中的验证失败与闪退难题。

weixin_28842269的博客 758

Oracle 存储过程详解(上)

这是一篇学习路上的(伪)详解,为了能灵活使用存储过程

不惧神风的博客 7542

小红书分享链接失效?教你永久保存笔记的2种方法(含API调用技巧)

本文详细解析了小红书笔记链接失效的原因,并提供了两种永久保存笔记的方法,包括短链接转换API调用技巧和本地归档技术。通过Python代码示例和工具推荐,帮助用户实现笔记内容的高效保存和管理,确保珍贵内容不再丢失。

gin88的博客 2768

毕设加分项!手把手教你完成基于YOLOv8与PyQt5的多类别目标检测系统——让你的毕设从“完成”到“出色”

从KITTI数据集处理,到YOLOv8模型训练,再到PyQt5界面开发,整个流程其实没有想象中那么难。只要你跟着步骤一步步来,不仅能顺利完成毕设,还能掌握目标检测和GUI开发的核心技能——这些技能在未来的求职、读研中都非常实用。如果过程中遇到问题,别担心!可以去YOLOv8的官方文档、PyQt5论坛找答案,也可以和同学、老师交流。记住,完成毕设的过程也是你技术成长的过程,坚持下去,你会为自己的成果感到自豪。

m0_71589036的博客 179

Oracle存储过程语法详解

本文主要讲解Oracle存储过程语法,包括:总体结构、存储过程声明、参数定义、变量声明、游标声明、行数据类型声明、变量赋值、条件判断、WHILE循环、FOR循环、游标使用、异常捕捉、异常处理、存储过程调用、存储过程代码示例、调用代码示例、调用结果展示。

实泽有之,无泽虚之 2068

《时序分析、时序约束和时序收敛》专栏的说明与导航

《时序分析、时序约束和时序收敛》专栏的说明与导航(建议阅读)。

孤独的单刀 14万+

ORACLE存储过程详解

ORACLE存储过程详解 1、定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。 2、存储过程的创建 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程...

170

ABAP ALV 导出总被锁死为固定格式?把 Always Use Selected Format 一键重置到可选状态

摘要:SAP ALV报表导出时勾选"Always Use Selected Format"会导致导出格式被锁定,无法切换格式。文章分析该问题原因(系统持久化配置),提供用户自助解法(ALV list使用&RESET_EXCEL命令码,ALV grid通过右键菜单恢复弹窗),管理员治理方案(使用SALV_BS_ADMIN_MAINTAIN报表批量处理),并指出SAP_BASIS 7.02版本的特殊处理方式(需参考SAP Note 1716802和1590484)。最后给出排障清单,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ORACLE进阶(七)存储过程详解

所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。存储过程包含三部分:过程声明,执行过程部分,存储过程异常。 2.2 带参存储过程实例 2.3 带参数存储过程含赋值方式 其中参数IN表示输入参数,是参数的默认模式。 表示返回值参数,类型可以使用任意Oracle中的合法类型。 OUT模式定义的参数只

IT全栈 华强工作室 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

oracle存储过程详解

在Oracle中,创建带参数的存储过程通常涉及到定义输入(IN)、输出(OUT)或输入输出(IN OUT)参数,并在存储过程的主体中使用这些参数。以下是一个简单的Oracle存储过程示例,它接受一个输入参数(一个数字),计算这个数字的平方,并通过一个输出参数返回结果。Oracle SQL Developer提供了一个强大的调试器,允许你逐步执行存储过程代码,查看变量值,设置断点等。这有助于增强代码的可维护性和可读性。游标的使用通常会增加存储过程的复杂性和执行时间,因此应谨慎使用,特别是在处理大量数据时。

qq_31874627的博客 4318

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

oracle存储过程超级详解

Oracle 存储过程总结 1、创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out ty pe) as --声明变量(变量名 变量类型) begin --存储过程的执行体 end test; 打印出输入的时间信息 E.g: create or replace procedure te

天涯明月 2303

oracle存储过程报错 跳过,oracle调试存储过程的过程详解

oracle调试存储过程的过程详解oracle如果存储过程比较复杂,我们要定位到错误就比较困难,那么可以存储过程的调试功能先按简单的存储过程做个例子,就是上次做的存储过程(proc_test)1、先在数据库的procedures文件找到我们之前创建存储过程2、选中存储过程,右键弹出菜单,选择 测试3、出现测试脚本页面,输入动态参数值,点击左上角的标志,进入调式模式4、出现调试操作按钮界面(依次:运...

weixin_36165049的博客 2325

Oracle存储过程案例详解

Oracle存储过程案例详解

jackleeonlyone的博客 1万+

Oracle存储过程详解

1、定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。 2、存储过程的创建 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。 (1)无参存储过程语法 ...

c1963962513的博客 356

java调用存储过程 oracle_Java调用Oracle存储过程详解

Java调用Oracle存储过程详解步骤:1、编写Oracle存储过程2、编写数据库获取连接工具类3、编写简单应用调用存储过程实现:1、Oracle存储过程:/*测试表*/create table test(id varchar2(32),name varchar2(32));/*存储过程 插入数据*/CREATE OR REPLACE PROCEDURE insert_procedure(PAR...

weixin_35765686的博客 355

oracle存储过程语法详解

存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。    定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起。这样做的好处至少有三个:    第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过...

u013066779的专栏 334

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

详解Oracle调试存储过程一 调试关键步骤1、在要调试的存储过程右键,选择编辑以进行调试,截图如下:2、点击小瓢虫,弹出调试窗口,截图如下:3、输入7839员工编号,点击确认,进行调试,截图如下:4、该截图说明权限不够,需要添加scott用户的权限。5、增加权限语句如下:show userUSER 为"SCOTT"sql> connect system输入口令:已连接。sql> sh...

weixin_35777914的博客 1627
上一篇: oracle存储过程
下一篇: 分布式系统
betterfate
博客等级 码龄14年 8粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值