`
wangyanlong0107
  • 浏览: 494472 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】Oracle带输入输出参数的存储过程

 
阅读更多

(一)使用输入参数
需求:在emp_copy中添加一条记录,empno为已有empno的最大值+1,ename不能为空且长度必须大于0,deptno为60。
创建存储过程:
create or replace procedure insert_emp(emp_name in varchar2, dept_no in number) as 
begin
  declare max_empno number;
  begin
    if(emp_name is null or length(emp_name) = 0) then
      return;
    end if;

    if(dept_no != 60) then
      return;
    end if;

    select max(empno) into max_empno from emp_copy;
    insert into emp_copy(empno, ename, deptno) values(max_empno + 1, emp_name, dept_no);
  end;
end insert_emp;
/

Procedure created.

调用存储过程并验证:
(1)
SQL>execute insert_emp('Li Si', 60);
PL/SQL procedure successfully completed.

SQL>
col empno format 99999;
col ename format a15;
col deptno format 99999;
select empno, ename, deptno from emp_copy where deptno = 60;

 EMPNO ENAME           DEPTNO
------ --------------- ------
  7981 Li Si           60

(2)
SQL> execute insert_emp('', 6);
PL/SQL procedure successfully completed.

SQL> select empno, ename, deptno from emp_copy where deptno = 6;

SQL> 

(二)使用输出参数
需求:在上个需求的基础上,要分别统计表emp_copy插入数据前后的记录数。
创建存储过程:
create or replace procedure insert_emp(emp_name in varchar2, dept_no in number, original_count out number, current_count out number) as 
begin
  declare max_empno number;
  begin
    if(emp_name is null or length(emp_name) = 0) then
      return;
    end if;

    if(dept_no != 60) then
      return;
    end if;

    select count(1) into original_count from emp_copy;
    select max(empno) into max_empno from emp_copy;
    insert into emp_copy(empno, ename, deptno) values(max_empno + 1, emp_name, dept_no);
    select count(1) into current_count from emp_copy;
  end;
end insert_emp;
/

Procedure created.

调用存储过程:
declare count1 number;
        count2 number;
begin
  insert_emp('Wang Wu', 60, count1, count2);
  dbms_output.put_line('Original count of table emp_copy is ' || count1);
  dbms_output.put_line('Current count of table emp_copy is ' || count2);
end;
/

Original count of table emp_copy is 15
Current count of table emp_copy is 16

PL/SQL procedure successfully completed.


(三)使用输入输出参数
in out参数综合了上述两种参数类型,既向过程体传值,也被赋值而传到过程体外。in out参数既可以用作输入也可以用作输出。
需求:实现两数交换。
创建存储过程:
create or replace procedure swap(value1 in out number, value2 in out number) as
begin
  value1 := value1 + value2;
  value2 := value1 - value2;
  value1 := value1 - value2;
end swap;
/

Procedure created.

调用存储过程:
declare a number := 22;
        b number := 33;
begin
  dbms_output.put_line('Before swap: a = ' || a || ', b = ' || b);
  swap(a, b);
  dbms_output.put_line('After swap: a = ' || a || ', b = ' || b);
end;
/

Before swap: a = 22, b = 33
After swap: a = 33, b = 22

PL/SQL procedure successfully completed

分享到:
评论

相关推荐

    Oracle带输入输出参数存储过程(包括sql分页功能)

    本文将深入探讨Oracle带输入输出参数的存储过程,以及如何结合SQL分页功能来优化查询。 首先,存储过程中的输入参数(IN)用于传递到存储过程中的数据,这些参数不可在存储过程中修改。例如,`p_id IN varchar2(150...

    帆软报表Oracle存储过程解决storeParameter1参数试用插件

    在帆软报表的设计过程中,当用户尝试调用一个Oracle数据库中的存储过程时,可能会遇到一个问题:即使存储过程本身并未声明任何输入或输出参数,设计界面仍会提示需要提供一个名为"storeParameter1"的参数。...

    C#调用oracle方法(包括调用存储过程)

    本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。这些知识点对于初学者来说尤为重要。 #### 前置知识 1. **C#基础**:理解C#的基本语法和概念。 2. **...

    C#调用存储过程详解(带返回值、参数输入输出等)

    本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGIN SELECT @studentname=...

    oracle 存储过程 函数 dblink

    除了基本的存储过程外,还可以创建带有输出参数的存储过程。例如,下面的`TESTB`存储过程将从表`TESTTB`中查询数据,并通过输出参数返回结果: ```sql CREATE OR REPLACE PROCEDURE TESTB( PARA1 IN VARCHAR2, ...

    Java调用oracle存储过程输出自定义对象或二维表

    在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...

    springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用or

    能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    接着,我们设置输入参数和输出参数,并执行存储过程。最后,我们获取输出参数的值并打印出来。 接下来,我们创建了一个名为 TESTPACKAGE 的包,包中包含了一个名为 TESTC 的存储过程。存储过程 TESTC 有一个输出...

    oracle存储过程实例

    存储过程可以带有参数,分为输入参数(IN)、输出参数(OUT)和输入输出参数(IN OUT)。调用存储过程通常使用`CALL`语句,但某些情况下(如只有输出参数的情况),需要在PL/SQL块中调用。 - 无参数过程: ```sql ...

    VB 调用oracle 带返回值的存储过程

    然后,创建OracleParameter对象来处理存储过程的输入和输出参数。 ```vb Dim cmd As New OracleCommand("get_max_user_id", conn) cmd.CommandType = CommandType.StoredProcedure ' 创建输出参数,注意Oracle的...

    C#中调用Oracle存储过程

    5. **添加参数**:使用`Parameters.Add`方法向命令对象添加参数,并设置参数的方向(输入或输出)及值。 6. **执行存储过程**:通过`ExecuteNonQuery`方法执行存储过程。 #### 四、示例代码详解 以下是对给定部分...

    oracle创建存储过程

    综上所述,以上示例覆盖了Oracle存储过程和函数的基本创建方法,包括无参数、带参数、默认参数、输出参数以及输入输出参数等不同情况。这些知识对于理解如何有效地使用Oracle数据库中的存储过程和函数至关重要。

    oracle存储过程常用技巧

    2. OUT 参数:作为输出参数,需要注意,当一个参数被指定为 OUT 类型时,就算在调用存储过程之前对该参数进行了赋值,在存储过程中可以重新赋值。 3. IN OUT 参数:既可以作为输入参数,也可以作为输出参数。 三、...

    VB调用ORACLE存储过程

    在VB中调用Oracle存储过程是一项常见的任务,特别是在开发基于Oracle数据库的应用程序时。ADO(ActiveX Data Objects)是微软提供的一个数据访问接口,它允许程序员通过VB等编程语言与数据库进行交互。以下是对VB...

    Spring访问传入数组参数的Oracle存储过程

    5. **处理结果**:如果存储过程有返回值或者输出参数,可以使用`registerOutParameter`和`getObject`方法获取。 `源码`标签表明我们将看到实际的代码示例,而`工具`标签暗示可能涉及到Spring框架的某些工具类。在这...

    oracle存储过程语法

    存储过程可以带有参数,参数可以是输入参数(IN)或输出参数(OUT)。参数的类型可以是Oracle中的任何合法类型。 变量的声明 在存储过程中,可以声明变量,以便存储过程的执行。变量的声明格式为: 变量名 类型...

    hibernate query调用oracle存储过程

    在上述代码中,我们使用了CallableStatement来处理带有输入和输出参数的存储过程。注意,对于输出参数,需要先注册其类型,然后在执行后通过`getXXX`方法获取值。 为了确保代码的可读性和可维护性,建议将这些调用...

    Oracle定时执行存储过程

    Oracle 定时执行存储过程 oracle 是一个功能强大的关系型数据库管理系统,可以执行各种复杂的任务,其中包括定时执行存储过程。定时执行存储过程可以让 oracle 自动执行某些操作,而不需要人工干预。下面我们将详细...

Global site tag (gtag.js) - Google Analytics