(一)使用输入参数

需求:在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;
/

调用存储过程并验证:

(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;
/

调用存储过程:

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;
/

调用存储过程:

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带输入输出参数的存储过程的更多相关文章

  1. C# 调用带输入输出参数的存储过程

    //调用存储过程执行类似于2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade3// ...

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

    记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...

  3. sql server 带输入输出参数的分页存储过程(效率最高)

    create procedure proc_page_withtopmax( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int out ...

  4. 用exec调用带有output输出参数的存储过程

    用exec调用带有output输出参数的存储过程,想要得到输出参数的值,必须在调用参数后面加output关键字,如: declare @value int exec up_test    2,3,@v ...

  5. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  6. C#中调用存储过程:带输入输出参数

    using (SqlConnection conn = new SqlConnection(this.GetConnectionString(this.WMPDBName))) { SqlComman ...

  7. sqlserver 带输出参数的存储过程的创建与执行

    创建 use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery4') drop proce ...

  8. c#调用带输出参数的存储过程

    sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...

  9. ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt.dkill.net/Article/D ...

随机推荐

  1. Redis源码分析(sds)

    源码版本:redis-4.0.1 源码位置:https://github.com/antirez/sds 一.SDS简介 sds (Simple Dynamic String),Simple的意思是简 ...

  2. fork()和vfork()的区别,signal函数用法,exec()系列函数的用法小结

    一:fork()和vfork()的区别:    fork()函数可以创建子进程,有两个返回值,即调用一次返回两个值,一个是父进程调用fork()后的返回值,该返回值是刚刚创建的子进程的ID;另一个是子 ...

  3. ELK集群之kafka(7)

    原理待补充: kafka依赖于zookeeper集群. 都是基于java 由于源码安装jdk 未声明bin下java 在各自server配置文件中声明 JAVA_HOME=/usr/local/jdk ...

  4. pytest框架+conftest.py配置公共数据的准备和清理

    1.pytest介绍:1.自动发现测试模块和测试方法 2.断言使用 assert+表达式即可 3.可以设置会话级.模块级.类级.函数级的fixture 数据准备+清理工作 4.丰富的插件库,==all ...

  5. 菜鸡的Java笔记

    1.注释 在JAVA中对于注释有三种: 单行注释:// 多行注释:/*--*/ 文档注释:/**--*/ 2.关键字和标识符 在程序中描述类名称,方法名称,变量等概念就需要使用标识符来定义.而在JAV ...

  6. IDEA下载 使用快捷方式 以及一些小教程

    IDEA下载 使用快捷方式 以及一些小教程 Idea下载 网址:链接: https://pan.baidu.com/s/1xRr3mhM6_VDHqC_w0F1MjQ 提取码: 6ypi 下载,安装方 ...

  7. [ARC117E]Zero-Sum Ranges 2

    令$sum_{i}=\sum_{j=1}^{i}a_{j}$,即要求其满足: 1.$sum_{0}=sum_{2n}=0$且$\forall 1\le i\le 2n,|sum_{i}-sum_{i- ...

  8. [loj2136]地震后的幻想乡

    考虑kruskal的过程:对$n$条边随机排列(排序),令$k$表示前$k$条边恰好能使图联通,根据题目的提示,即$E(\frac{k}{m+1})=\frac{E(k)}{m+1}$ 设$p(k)$ ...

  9. 【IDEA】字体大小和类型

    字体大小和类型 2020-09-08  09:06:21  by冲冲 1.工具界面的字体 2.代码的字体 注意:如果已经设置颜色主题,则还需要设置颜色主题的字体,才能生效.

  10. 从零开始学Kotlin第四课

    面向对象: //妹子 性格 声音 class Girl(var chactor:String,var voice:String) fun main(args: Array<String>) ...