`
高军威
  • 浏览: 182114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle PROCEDURE 存储过程

阅读更多
过程是指用于执行特定操作的PL/SQL块。如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程。通过使用过程,不仅可以简化客户应用的开发和维护,而且可以提高应用程序的运行机能。

一、 使用过程参数
当建立过程时,既可以指定过程参数,也可以不提供任何参数。过程参数包括输入参数、输出参数和输入输出参数,其中输入参数(IN)用于接收调用环境的输入数据,输出参数(OUT)用于将输出数据传递到调用环境,而输入输出参数(IN OUT)不仅要接收输入数据,而且还要输出数据到调用环境。不写明IN or OUT默认 是in。

创建一个存储过程的基本语句如下:
CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)] 
{AS|IS} 
[说明部分] 
BEGIN 
可执行部分 
[EXCEPTION 
错误处理部分] 
END [过程名]; 

注意,当定义参数时,只能指定数据类型,不能指定长度

例一:建立无参数的过程
alter user scott account unlock;--解锁 scott 用户

下面以建立用于输出当前日期和时间的过程OUT_TIME为例,说明建立无参数过程的方法。
CREATE OR REPLACE PROCEDURE getDeptCount
AS
deptCount INT;
BEGIN
SELECT COUNT(*) INTO deptCount FROM DEPT;
DBMS_OUTPUT.PUT_LINE('DEPT表的共有记录数:'||deptCount);
END getDeptCount;


执行存储过程语句:
---
BEGIN
getDeptCount;
END;
---
CALL  getDeptCount();


例二:创建带有输入参数的存储过程,该过程通过员工编号打印工资额
create or replace procedure getsalarybyempno(eno number) ----参数的数据类型不能指定长度
as
       salary emp.sal%type;
begin
  select sal into salary from emp where empno=eno;
  dbms_output.put_line(eno||'号员工的工资为'||salary);
end getsalarybyempno;


当我们创建的存储过程没有参数时,在存储过程名字后面不能有括号。在AS或者IS后至BEGIN之前是声明部分,存储过程中的声明不使用DECLARE关键字。同匿名PL/SQL块一样,EXCEPTION和声明部分都是可选的
当我们创建的过程带有错误时,我们可以通过SELECT * FROM USER_ERRORS查看,或者使用SHOW ERRORS [ PROCEDURE Proc_Name]查看。

当定义的存储过程含有参数时,参数的数据类型不能指定长度。参数还有输入和输出之分,本例中没有指定,默认情况为输入参数,也可显示的指定某个参数是输入参数,如(eNo IN NUMBER)。同示例1不同,该例中加入了异常处理


例三:创建含有输入和输出参数的存储过程,该过程通过员工编号查找工资额,工资额以输出参数返回

CREATE OR REPLACE PROCEDURE getsalaryout(eNo IN NUMBER,salary OUT NUMBER)
AS
BEGIN
SELECT SAL INTO salary  FROM EMP WHERE EMPNO=eNo;
return;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到该编号的员工');
END getsalaryout;

/*
当过程中含有输出参数时,调用时必须通过BEGIN  END块,不能通过EXEC或CALL调用。
*/
DECLARE
salary NUMBER(7,2);
BEGIN
getsalaryout(7788,salary);
DBMS_OUTPUT.PUT_LINE('该员工的工资为:'||salary||'元!');
END;


例四:创建参数类型既是输入参数也是输出参数的过程
CREATE OR REPLACE PROCEDURE getsalaryoutput(noSalary IN OUT NUMBER)
AS
BEGIN
SELECT SAL INTO noSalary FROM EMP WHERE EMPNO=noSalary;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到该编号的员工');
END getsalaryoutput;
/*
调用如下
*/
DECLARE
salary NUMBER(7,2);
BEGIN
  salary:=7369;
  getsalaryoutput(salary);
DBMS_OUTPUT.PUT_LINE('该员工的工资为:'||salary||'元!!');
END;


例五:创建带有默认值的过程
create or replace procedure addEmp
(
empNo NUMBER,
eName VARCHAR2,
job  VARCHAR2 :='CLERK',
mgr  NUMBER,
hiredate DATE  DEFAULT SYSDATE,
sal  NUMBER  DEFAULT 1000,
comm  NUMBER  DEFAULT 0,
deptNo NUMBER  DEFAULT 30
)
AS
BEGIN
INSERT INTO emp VALUES(empNo,eName,job,mgr,hiredate,sal,comm,deptNo);
END addEmp;

/*
调用如下
*/

begin
 addEmp(7776,'zhangsan','CODER',7788,'06-1月-2000',2000,0,10);  --没有使用默认值
end;
begin
addEmp(7777,'lisi','CODER',7788,'06-1月-2000',2000,NULL,10);--可以使用NULL值
end;
begin
addEmp(7778,'wangwu',mgr=>7788);  --使用默认值  =>给参数赋值
end;
begin
addEmp(mgr=>7789,empNo=>7779,eName=>'sunliu');  --更改参数顺序
end;


二、维护过程

1、删除存储过程
DROP PROCEDURE Proc_Name;


2、查看过程状态
SELECT object_name,status  FROM USER_OBJECTS WHERE object_type='PROCEDURE';


3、重新编译过程
ALTER PROCEDURE Proc_Name COMPILE;


4、查看过程代码
SELECT * FROM USER_SOURCE WHERE TYPE='PROCEDURE';


三、参数的理解

-- 输出参数不可以修改解决的方法有两种
--1 把参数改成输入参数
--2 就是参数改成 可输入输出的参数;
调用过程的 三个方式
1 就是使用call
在只用call方式调用函数的时候,必须加要括号,有参数,还要加参数值

这个方式在命令窗口,调用过程,将不会出现输入的数据.
2 就是使用exec 命令,进行命令调用过程, 使用命令,就必须在命令行里面输入
过程名,这个命令窗口中,可加可不加() ,如果有参数的,就一定要加,还有参数值,参数值的类型要与
变量类型相同.
3 在语句块中进行调用过程,这个方式和命令模式类似,他们都是可要可不要(),
-- 在2 和 3 中的 没有括号的情况是,过程没有参数 ,如果有,就必须要有()
输出参数的特点
1 一个过程中,如果有输出参数(OUT 参数),在调用过程的使用,也要传入一个参数, 这个参数可以不用在调用的地方
进行赋值,就直接传入一个声明好的一个变量,用来接受存储过程中的输出参数的值(OUT 参数)
2 输入参数 值不可以改变在过程中,
注意: 在存储过程中,他的参数类型不可以设置它的大小 ;

补充:sqlplus中执行含有输出参数为游标的存储过程









分享到:
评论

相关推荐

    oracle存储过程学习经典入门

    CREATE PROCEDURE 语句是用来创建 Oracle 存储过程的语句,变量声明是用来声明变量的语句,控制语句是用来控制流程的语句,循环语句是用来循环执行的语句。 关于 Oracle 存储过程的若干问题备忘 在学习 Oracle ...

    Oracle-procedure.rar_oracle_oracle procedure_oracle 存储过程

    在Oracle数据库中,存储过程(Procedure)是核心的编程组件,它允许开发人员编写和存储可重复使用的SQL和PL/SQL代码块。这篇教程将深入探讨Oracle存储过程的概念、创建、调用以及其在数据库管理中的应用。 一、存储...

    Oracle简单存储过程

    Oracle procedure 存储过程 创建+执行+删除

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    Oracle存储过程返回结果集

    在Oracle数据库中,存储过程是一种预编译的SQL和PL/SQL代码集合,可以执行复杂的业务逻辑或数据处理任务。当需要从存储过程中返回多个结果时,通常会使用结果集。本篇将深入探讨如何在Oracle存储过程中创建并返回一...

    oracle存储过程教程

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写包含一系列SQL语句和PL/SQL块的程序单元,这些程序单元可以在需要时执行,提高了数据处理的效率和应用程序的性能。在Java开发中,Oracle...

    Oracle存储过程、函数和包

    ### Oracle存储过程、函数和包的关键知识点 #### 1. 存储过程和函数的认识 - **定义**:存储过程和函数是特定类型的PL/SQL块,它们被存储在数据库中,作为命名的对象存在。 - **命名存储**:与普通的PL/SQL块不同,...

    delphi调用Oracle的存储过程

    ### Delphi调用Oracle的存储过程 在软件开发过程中,Delphi作为一种强大的开发工具,能够高效地与多种数据库系统进行交互。本篇文章将详细介绍如何在Delphi中调用Oracle数据库中的存储过程,并通过一个具体的例子来...

    C# 传入自定义列表List 到Oracle存储过程

    在.NET开发中,C#与Oracle数据库的交互是常见的任务,特别是当需要处理大量数据时,存储过程可以提供更高的性能和灵活性。本文将详细讲解如何在C#中使用自定义列表(List)作为参数调用Oracle存储过程,以及实现这一...

    pb中执行oracle存储过程脚本

    标签进一步细化了这个主题:“pb”指PowerBuilder,“oracle procedure”指的是Oracle存储过程,而“存储过程”是数据库管理中常见的概念,它允许将一系列操作封装在一起,形成一个可重用的单元。 压缩包中的文件...

    oracle存储过程-帮助文档

    `oracle procedure.chm`是一个帮助文件,通常包含详细的参考信息、示例和教程,供用户学习和查询Oracle存储过程的用法。CHM(Compiled HTML Help)格式是一种微软提供的离线帮助文档格式,用户可以通过搜索和导航来...

    Delphi中调用oracle的存储过程返回数据集

    Delphi 中调用 Oracle 的存储过程返回数据集是指在 Delphi 应用程序中调用 Oracle 数据库中的存储过程,并将存储过程的返回结果集显示在 Delphi 应用程序中。这种方式可以将 Oracle 数据库中的数据实时同步到 Delphi...

    oracle的存储过程如何返回结果集

    ### Oracle存储过程返回结果集详解 #### 一、概述 在Oracle数据库中,存储过程是一种重要的编程组件,它能够执行一系列SQL语句并处理复杂的业务逻辑。存储过程的一个常见应用场景是返回结果集(Record Set),这有...

    oracle的存储过程学习资料

    Oracle的存储过程是数据库管理中的一个重要概念,它是一组为了完成特定功能的SQL语句集,可以被命名、保存并在需要时调用。这组学习资料涵盖了存储过程的基础操作和进阶知识,对于想要深入理解Oracle数据库管理和...

    几个Oracle procedure实例

    Oracle存储过程是数据库管理系统中的一种重要编程元素,用于封装一系列SQL和PL/SQL语句,以便重复使用和提高性能。在Oracle中,存储过程可以接受输入参数、返回输出结果,并可以执行事务控制、异常处理等复杂的操作...

    oracle 存储过程 函数 dblink

    ### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...

    oracle存储过程实例

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL和PL/SQL语句,形成一个可重用的程序单元。存储过程在数据库中预先编译并存储,这样在执行时能提高效率,因为它避免了每次调用时的重新...

    hibernate query调用oracle存储过程

    Oracle数据库作为企业级的主流数据库系统,提供了丰富的存储过程和函数功能,以实现复杂的数据处理逻辑。而Hibernate作为一种流行的Java持久化框架,它允许开发者通过ORM(对象关系映射)方式与数据库进行交互。本篇...

    oracle调用存储过程

    在Oracle中,你可以使用`CREATE OR REPLACE PROCEDURE`语句来创建一个存储过程。例如,创建一个简单的存储过程,接收两个参数并返回它们的和: ```sql CREATE OR REPLACE PROCEDURE add_numbers (p_num1 NUMBER,...

Global site tag (gtag.js) - Google Analytics