(一)使用输入参数

需求:在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. Linux 用户&用户组

    用户和用户组的概念 用户 ---> 使用操作系统的人 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系 ...

  2. @RequestAttribute与@MatrixVariable

    @RequestAttribute 它只能使用在方法入参上,从request请求参数中获取对应的属性值. //路径跳转 @GetMapping("/goto") public St ...

  3. buuoj刷题 October

    2019 极客大挑战 web easysql 直接万能密码登就完事了 LoveSQL 万能密码登进去,给了md5,没解出来 手注吧,都要忘了手注怎么注了 猜字段数 3的时候正常不报错 看回显位,2,3 ...

  4. LiteFlow 2.6.4版本发行注记,里程碑版本!

    一 这个版本做的很折腾.期间几个issue推翻重做了好几次. 但我最终还是带来了LiteFlow 2.6.4这个重要版本. 虽然版本是小版本号升级,但是带来的更新可一点也不少.并完全向下兼容. 如果你 ...

  5. ES6-正则新增(复习+学习)

    ES6-正则 昨天,复习了正则的基本知识,今天学习ES6新增的正则的知识,做一个总结笔记,大家可以先看4,5对应的方法然后再从头看,话不多说直接上: 1.RegExp构造函数的区别 2.新增的修饰符 ...

  6. 第五周PTA笔记 后缀表达式+后缀表达式计算

    后缀表达式 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右进行(不用考虑运算符的优先级). 如:中缀表达式 3(5–2 ...

  7. Mac 安装 RabbitMQ 出现的问题

    安装 RabbitMQ 在官网这里按照步骤来就行 出现Error: Permission denied @ apply2files - /usr/local/lib/docker/cli-plugin ...

  8. 菜鸡的Java笔记 - java 双向一对多映射

    双向一对多映射    two-way    开发要求:        根据数据表的结构进行简单java类的转换:        要求实现如下的输出信息:            可以根据课程取得全部参与 ...

  9. 虚拟化中虚拟机处理器核数与物理主机cpu的关系

    vCPU,顾名思义,是虚拟CPU. 创建虚拟机时,需要配置vCPU资源. 因此vCPU是虚拟机的部件. 因此脱离VM,谈论vCPU是没有意义的.虚拟化管理系统如何调度vCPU,取决于系统内的虚拟机数目 ...

  10. [hdu7065]Yinyang

    将一个格子看作一个节点,相邻(有公共边)的同色格子之间连边,那么由前两个条件即要求图恰被分为两个非空连通块(由于$n,m\ge 3$,显然不能不使用某种颜色) 下面,来分析图中的简单环,其对应于网格图 ...