(一)使用输入参数

需求:在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. 浅谈springboot自动配置原理

    前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...

  2. ITextRenderers html生成pdf 分页+横向

    1.pdf横向生成问题:格式化html是加上 @page{size:297mm 210mm;} public static String formatPdfHtml(String html,Strin ...

  3. c++学习笔记(六)

    windows批处理 什么是批处理? 批处理(Batch),也称为批处理脚本. 顾名思义,批处理就是对某对象进行批量的处理.批处理文件的扩展名为bat. 批处理文件(batch file)包含一系列 ...

  4. C++基本程序设计——面向对象程序设计课堂笔记

    主要对老师上课的ppt的笔记整理 C++基本程序设计 1.c++的输入输出 使用cin,cout和流运算符,开头须有 #include<iostream> (1)cin语句:cin> ...

  5. IIS设置URL重写,实现页面的跳转的重定向方法

    默认IIS是不提供URL重写模块的. 请注意,不要将IIS默认的HTTP重定向理解为url重写. 安装url重写模块 url重写,是要从iis的应用市场下载url重写组件才可以的. URL重写工具的下 ...

  6. 配置Google支付相关参数(client_id, client_secret, refresh_token)

    1. 登陆Google开发者账号,点击左边API权限 Google控制台 创建新项目 转到 Google Play 管理中心的 API 权限页面. 接受<服务条款>. 点击创建新项目. 系 ...

  7. 【linux系统】命令学习(八)bash 编程实战学习

    常见shell : bash  sh zsh windows: git bash    cygwin MAC : terminal iterm netstat 是linux下用于显示网络状态的命令.通 ...

  8. 重新整理 .net core 实践篇——— 权限源码阅读四十五]

    前言 简单介绍一下权限源码阅读一下. 正文 一直有人对授权这个事情上争论不休,有的人认为在输入账户密码给后台这个时候进行了授权,因为认为发送了一个身份令牌,令牌里面可能有些用户角色信息,认为这就是授权 ...

  9. [Aizu1410]Draw in Straight Lines

    注意到当操作确定后,显然操作顺序总是涂黑色的1操作->涂白色的1操作->2操作 用$b/w_{r/c}(i,j)$表示$(i,j)$是否被黑色/白色 横着/竖着 涂过(1表示涂过,0表示没 ...

  10. 面试官又整新活,居然问我for循环用i++和++i哪个效率高?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 前几天,一个小伙伴告诉我,他在面试的时候被面试官问了这么一个问题: 在for循环中,到底应该用 i++ 还是 ++i ? 听到这,我感觉这面试官 ...