oracle之存储过程和存储函数的使用和区别
#存储过程:封装在服务器上一段sql片段,已经编译好了的代码。
1.客户端调存储过程,执行效率就会非常高效。
语法:
create [or replace] procedure 存储过程名称
(参数名 in|out 参数类型,参数名 in|out 参数类型)is | as
- - 声明部分
begin
- - 业务逻辑
end;
例子:
/*需求:给指定员工涨薪,并打印涨薪前后的工资
参数:in员工编号(用来接受输入) in 涨多少
声明一个变量:存储涨工资前的工资(因为不确定,所以用变量) 打印涨薪前的工资 更新工资
打印涨薪后的工资
*/
create or replace procedure pro_updatesal(vempno in number, vnum in number)
is
- -声明变量,记录当前工资
vsal number;
begin
- -查询当前工资
select sal into vsal from emp
where empno=vempno;
- -输出涨薪前的工资
dbms_output.put_line(“涨薪前:”||vsal);
- -更新工资
update emp set sal=vsal+vnum
where empno=vempno;
- -输出涨薪后的工资
dbms_output.put_line(“涨薪后:”||(vsal+vnum);
- -提交事务
commit;
end;
调用:
方法一:
- -在右边的小窗口中找到一个procedures,并在其中点相应文件点右键,单击view看错误提示。再选中再执行。
call proc_updatesal(7788,10);
- -再选中再执行。并在out中可以看到内容。
方法二:
begin
call proc_updatesal(7788,-100);
end;
说明:7788是员工编号。
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
#存储函数:封装在oracle在服务器里面的plsql片段,
它是已经编译好的代码片段。
语法:
create [for replace] function 存储函数的名称(参数名 in|out 参数类型,参数名 in|out 参数类型) return 参数类型 is | as begin end;
/*存储过程和函数的区别:
1.它们本质上没有区别
2.函数存在的意义是给过程调用 /*存储过程中调用存储函数*/
3.函数的返回类型在is | as上面定义
4.函数可以在sql里面直接调用
*/
例子:默认用in
/*查询指定员工的年薪
参数:员工的编号
返回:年薪
*/
create or replace function
func_getsal(vempno number)
return number
is
- -声明变量,保存年薪
vtotalsal number;
begin
select sal*2+nul(comm,0) into vtotalsal
from emp
where empno=vempno;
return vtotalsal;
end;
说明:into vtotalsal是表示赋值给 into vtotalsal,也就是年薪,并最后将年薪返回过来。
再然后选中并运行,然后可以看到左侧function中有对应的函数名,可以用view
查看是否有错误。
- -调用存储函数
declare
vsal number;
begin
vsal=func_getsal(7788);
dbms_output.put_line();
- -这里要有一个返回值
- -所以要声明一个返回值
end;
- -最后可以在output中看到结果。
- -函数可以在sql里面直接调用
select ename,func_getsal(empno)
from emp;
—存储过程
create or replace procedure proc_gettotalsal
(empmno in number,vtotalsal out number)
is
begin
select sal*12+nvl(comm,0) into vtotalsal
from emp
where empno=vempno;
end;
declare
begin
pro_gettotalsal(7788,vtotal);
dbms_output.put_line(“年薪:”|| vtotal);
end;
----------------------------------------------------------------------------------------
说明:重复出变化,把同一东西做三次,好过把十个东西做一次。
----------------------------------------------------------------------------------------
从两个表达式返回一个非 null 值。
语法
NVL(eExpression1, eExpression2)
参数
eExpression1, eExpression2
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。
eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
----------------------------------------------------------------------------------------
oracle之存储过程和存储函数的使用和区别的更多相关文章
- 编程开发之--Oracle数据库--存储过程和存储函数(2)
上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...
- 编程开发之--Oracle数据库--存储过程和存储函数(1)
1.存储过程和存储函数 描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数 区别:存储函数可以通过return子句返回一个函数的值 (1)存储过程 语法:create [or re ...
- Oracle数据库---存储过程、存储函数
--创建存储过程CREATE OR REPLACE PROCEDURE first_procISBEGIN DBMS_OUTPUT.PUT_LINE('我是过程'); DBMS_OUTPUT.PUT_ ...
- Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...
- oracle存储过程和存储函数&触发器
oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...
- oracle存储过程和存储函数
存储过程 1.存储过程简介 下面先来简单介绍一下oracle的存储过程的语法,如下: create or replace procedure Tony_Process ( num in number, ...
- Oracle 存储过程以及存储函数
以下的一些例子是基于scott用户下的emp表的数据,一和二使用的均为in,out参数,最后一个综合练习使用了 in out参数 一.存储过程 1.创建无参的存储过程示例 ------ hello ...
- 存储过程,存储函数(Oracle)
存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 存储过程和存储函数的区别? 存储函数:可以通过return 语句返回函数值. 存储过程:不能 除此之外我们可以认为 ...
- day70-oracle 12-Java调用存储过程和存储函数
我们现在调用的是存储过程和存储函数.用CallableSatement调用存储函数和存储过程. RDBMS:关系数据库.使用标准方式调用存储过程.也就是说:在mysql中调用和在oracle中调用的写 ...
随机推荐
- 构造器初始化(static)
package demo; /* * 在类 的内部,变量定义的先后顺序决定了初始化的顺序.即使变量定义散布于方法定义之间, * 它们仍旧会在任何方法(包括构造器)被调用之前得到初始化. */ publ ...
- Angular知识点
Angular CLI 快速创建Angular 2项目和组件, 压缩打包发布. 7.创建包含html.ts.css文件的命令cd到需要创建文件的目录下面,输入如下命令 ng g c myFile 会自 ...
- 阿里云香港主机自动换IP
为什么要写这个脚本原因你懂的,现在都是直接封IP pip3 install aliyun-python-sdk-alidns aliyun-python-sdk-domain aliyun-pytho ...
- mybatis 调用oracle存储过程如何返回out参数值
调试了半天,其实整体用map传入传出也挺简单, 主要是调用存储过程 select标签里平时习惯不写 statementType="CALLABLE",调用没有out参数时也能正常用 ...
- 15-Python3 编程第一步
2018-11-20 11:42:06 ''' 肥婆纳妾数列 斐波那契数列,又称黄金分割数列:这个数列从第3项开始,每一项都等于前两项之和, 随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的 ...
- MySQL.Linux.安装
Linux 7.x.安装 MySQL 环境: linux是安装在虚拟机中的,宿主机是:win10系统.安装MySQL的时候,首先需要网络是通的(宿主机和虚拟机之间通信).相关配置,参见:虚拟机和宿主机 ...
- msyql 移动某一列数据到某列 & 字段加前缀
#移动数据 UPDATE dcs_organize_user AS a, dcs_organize_user AS b SET a.SHORTTELNO=b.USERTELNO WHERE a.id= ...
- linux中安装oracle数据库
1. 执行 ./runInstaller 提示 /tmp 的空间过小执行 mount -o remount,size=1G,noatime /tmp重新设置 /tmp 的大小 2. 安装完成数据库之后 ...
- webform非表单提交时防xss攻击
1.webform默认配置下,主动防御了针对表单提交的xss攻击,但这次发生时因为url导致的,所以webform的默认防御机制不起作用 webform下输出非表单提交获得的数据的时候,要加htm ...
- sql2008升级到r2提示:检查当前是否正确配置了报表服务器、数据库服务器是否正在运行以及您是否有权访问
sql2008升级到r2提示:检查当前是否正确配置了报表服务器.数据库服务器是否正在运行以及您是否有权访问 解决方法:把服务开启ok