广告
返回顶部
首页 > 资讯 > 数据库 >Oracle系列:(29)存储过程和存储函数
  • 122
分享到

Oracle系列:(29)存储过程和存储函数

2024-04-02 19:04:59 122人浏览 泡泡鱼
摘要

1、存储过程【procedure】什么是存储过程?事先运用oracle语法写好的一段具有业务功能的程序片段,长期保存在oracle服务器中,供oracle客户端(例如,sqlplus)和程序语言远程访问,类


1、存储过程【procedure】


什么是存储过程?

事先运用oracle语法写好的一段具有业务功能的程序片段,长期保存在oracle服务器中,供oracle客户端(例如,sqlplus)和程序语言远程访问,类似于Java中的函数。



为什么要用存储过程?

    (1)PLSQL每次执行都要整体运行一遍,才有结果

    (2)PLSQL不能将其封装起来,长期保存在oracle服务器中

    (3)PLSQL不能被其它应用程序调用,例如:Java


存储过程与PLSQL是什么关系?

存储过程是PLSQL的一个方面的应用,而PLSQL是存储过程的基础。

即存储过程需要用到PLSQL。


--------------------------------------------------------存储过程


语法:

create [or replace] procedure 过程名[(参数列表)]  
as
PLSQL程序体;


注意:存储过程中有【begin…end;/】,无declare


创建无参存储过程hello,无返回值,语法:create or replace procedure 过程名 as PLSQL程序

create or replace procedure hello
as
begin
       dbms_output.put_line('这是我的第一个存储过程'); 
end;
/


删除存储过程hello,语法:drop procedure 过程名

drop procedure hello;


调用存储过程方式一,exec 存储过程名

exec hello;


调用存储过程方式二,PLSQL程序

begin
  hello;  
end;
/

Oracle系列:(29)存储过程和存储函数


调用存储过程方式三,Java程序

JDBC中讲过一个对象:CallableStatement


创建有参存储过程raiseSalary(编号),为7369号员工涨10%的工资,演示in的用法,默认in,大小写不敏感

-- 定义过程
create or replace procedure raiseSalary(pempno number)
as
begin
  update emp set sal=sal*1.2 where empno=pempno;
end;
/

-- 调用过程
exec raiseSalary(7369);

Oracle系列:(29)存储过程和存储函数


创建有参存储过程findEmpNameAndSalAndJob(编号),查询7788号员工的的姓名,职位,月薪,返回多个值,演示out的用法

-- 定义过程
create or replace procedure findEmpNameAndSalAndJob(pempno in number,pename out varchar2,pjob out varchar2,psal out number)
as
begin
  select ename,job,sal into pename,pjob,psal from emp where empno=pempno;
end;
/
-- 调用过程
declare
   pename emp.ename%type;
   pjob emp.job%type;
   psal emp.sal%type;
begin
  findEmpNameAndSalAndJob(7369,pename,pjob,psal);
  dbms_output.put_line('7369号员工的姓名是' || pename ||',职位是' || pjob || ',月薪是' || psal);
end;
/

Oracle系列:(29)存储过程和存储函数


什么情况下用exec调用,什么情况下用PLSQL调用存储过程?

exec适合于调用存储过程无返回值

plsql适合于调用存储过程有返回值,不管多少个


用存储过程,写一个计算个人所得税的功能

-- 定义存储过程
create or replace procedure get_rax(sal in number,rax out number)
as
  -- sal表示收入
  -- bal 表示需要交税的收收入
  bal number;
begin
  bal := sal - 3500;
  if bal <= 1500 then
    rax := bal * 0.03 - 0;
  elsif bal <= 4500 then
    rax := bal * 0.1 - 105;
  elsif bal <=9000 then
    rax := bal * 0.2 - 555;
  elsif bal <=35000 then
    rax := bal * 0.25 - 1005;
  elsif bal <= 55000 then
    rax := bal * 0.3 - 2755;
  elsif bal <=80000 then
    rax := bal * 0.35 - 5505;
  else 
    rax := bal * 0.45 - 13505;
  end if;
end;
/


-- 调用存储过程
declare
   -- 需要交的税
   rax number;
begin
   get_rax(&sal,rax);
   dbms_output.put_line('你需要交税' || rax);     
end;
/

Oracle系列:(29)存储过程和存储函数


2、存储函数



创建无参存储函数getName,有返回值,语法:create or replace function 函数名 return 返回类型 as PLSQL程序段

create or replace function get_name return varchar2
as 
begin
       return 'hello 你好';  
end;
/


删除存储函数getName,语法:drop function 函数名

drop function get_name;


调用存储函数方式一,PLSQL程序

declare
  name varchar2(20);
begin
  name := get_name(); 
  dbms_output.put_line(name); 
end;
/


调用存储函数方式二,Java程序


创建有参存储函数findEmpIncome(编号),查询7369号员工的年收入,演示in的用法,默认in

-- 定义存储函数
create or replace function findEmpIncome(pempno in number) return number
as
       income number; 
begin
  select sal*12+NVL(comm,0) into income from emp where empno=pempno;
  return income;
end;
/
-- 调用存储函数
declare
   income number;
begin
   income := findEmpIncome(&income);
   dbms_output.put_line('该员工的年收入为' || income);
end;
/

Oracle系列:(29)存储过程和存储函数

创建有参存储函数findEmpNameAndJobAndSal(编号),查询7788号员工的的姓名(return),职位(out),月薪(out),返回多个值

-- 定义存储函数
create or replace function findEmpNameAndJobAndSal(pempno in number,pjob out varchar2, psal out number) return varchar2
as
       pename emp.ename%type;
begin
       select ename,job,sal into pename,pjob,psal from emp where empno=pempno;
       return pename;       
end;
/

-- 调用存储函数
declare
   pename emp.ename%type;
   pjob emp.job%type;
   psal emp.sal%type;
begin
   pename := findEmpNameAndJobAndSal(&empno,pjob,psal);
   dbms_output.put_line('7369号员工的姓名是'|| pename ||',职位是'|| pjob || ',月薪是' || psal);
end;
/


3、存储过程和存储函数的适合场景



注意:适合不是强行要使用,只是优先考虑


什么情况下【适合使用】存储过程?什么情况下【适合使用】存储函数?

    【适合使用】存储过程:无返回值 或 有多个返回值时,适合用过程 

    【适合使用】存储函数:有且只有一个返回值时,适合用函数

   

什么情况【适合使用】过程函数,什么情况【适合使用】SQL?

    【适合使用】过程函数:

    》需要长期保存在数据库

          》需要被多个用户重复调用

          》业务逻辑相同,只是参数不一样

    》批操作大量数据,例如:批量插入很多数据

    【适合使用】SQL:

    》凡是上述反面,都可使用SQL

    》对表,视图,序列,索引,等这些还是要用SQL 


批量添加操作示例:

-- 定义过程
create or replace procedure batchInsert
as
       i number(4) := 1;
begin
       for i in 1..999
           loop
             insert into emp(empno,ename) values(i,'员工'||i);
           end loop; 
end;
/

-- 调用过程
exec batchInsert;





您可能感兴趣的文档:

--结束END--

本文标题: Oracle系列:(29)存储过程和存储函数

本文链接: https://www.lsjlt.com/news/42722.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle系列:(29)存储过程和存储函数
    1、存储过程【procedure】什么是存储过程?事先运用oracle语法写好的一段具有业务功能的程序片段,长期保存在oracle服务器中,供oracle客户端(例如,sqlplus)和程序语言远程访问,类...
    99+
    2022-10-18
  • Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数
    1、存储过程1.1、准备SQL-- 定义存储过程 create or replace procedure get_rax(salary ...
    99+
    2022-10-18
  • 存储过程和函数 oracle
    declare begin   dbms_output.put_line("Hello World"); end; declare   i number := 10; begin   if i > 5 then     dbms_ou...
    99+
    2021-01-19
    存储过程和函数 oracle
  • Oracle存储过程和函数
      创建一个存储过程:CREATE OR REPLACE procedure proc_trade(    v_tradeid...
    99+
    2022-10-18
  • Oracle中怎么创建存储过程和存储函数
    本篇文章为大家展示了Oracle中怎么创建存储过程和存储函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。select * from emp;------...
    99+
    2022-10-18
  • MySQL系列之五 视图、存储函数、存储过程、触发器
    目录系列教程一、视图 1、视图的创建 2、查看视图定义 3、删除视图 二、存储函数 1、系统函数 2、自定义函数(user-defined function:UDF) 三、存储过程 ...
    99+
    2022-11-12
  • oracle中存储函数与存储过程的示例
    这篇文章主要介绍了oracle中存储函数与存储过程的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:存储过程:简单来说就是有名字的pl...
    99+
    2022-10-18
  • 浅谈MYSQL存储过程和存储函数
    目录1. 什么是存储过程和存储函数?2. 创建存储过程3. 创建存储函数4. 存储过程和存储函数的使用5. 带有if语句的存储过程6. 带有循环语句的存储过程7. 带有事务的存储过程8. 带有游标的存储函数9. 存储过程...
    99+
    2023-05-05
    MYSQL存储过程 MYSQL 存储函数
  • oracle存储过程和函数的区别
    oracle存储过程和函数的区别:1、返回值,存储过程没有返回值,函数具有返回值;2、使用方式, 存储过程使用CALL语句来调用,函数可以直接在SQL语句中使用;3、能力,存储过程更适合用于执行复杂的业务逻辑,函数可以作为SQL语句的一部分...
    99+
    2023-08-07
  • 细谈Mysql的存储过程和存储函数
    1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语句...
    99+
    2022-10-18
  • 010—存储过程和函数
    一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了。 2.调试麻烦...
    99+
    2022-10-18
  • MySQL存储过程和函数
    存储过程与函数 类似与Java的方法和C语言的函数 存储过程概述 含义 一组经过预先编译的SQL语句的封装 执行过程:存储过程预先存储在MySQL服务器上,客户端发出命令后,服务器可以把预先存储好的SQL语句全部执行 好处 简化操作,提...
    99+
    2020-11-16
    MySQL存储过程和函数
  • MySQL 存储过程和函数
    创建存储过程和函数 创建存储过程和函数就是将经常使用的一组 SQL 语句组合在一起,并将这些 SQL 语句当作一个整体存储在 MySQL 服务器 1. 创建存储过程 CREATE PROCEDURE procedure_name ([p...
    99+
    2018-04-13
    MySQL 存储过程和函数
  • 创建存储函数、删除存储函数及 存储函数与存储过程的区别
    之前,我们列举不少mysql自带的函数,但是有些时候自带函数并不能很好满足我们的需求,此时就需要自定义存储函数了,存储函数与存储过程有些类似,简单来说就是封装一段sql代码,完成一种特定的功能,并返回结果。其语法如下: CREATE FUN...
    99+
    2022-02-07
    创建存储函数 删除存储函数及 存储函数与存储过程的区别
  • oracle中存储函数与存储过程的区别是什么
    这期内容当中小编将会给大家带来有关oracle中存储函数与存储过程的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一:存储过程:简单来说就是有名字的pl/sql...
    99+
    2022-10-18
  • 九、MySQL存储过程和函数
     存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理。9.1、创建存储过程和函数  存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句...
    99+
    2022-10-18
  • Mysql之存储过程和函数
    Mysql之存储过程和函数存储过程就是一条或多条SQL语句的集合,可视为批文件,但是其作用不仅用于批处理。存储程序分为:1、存储过程 2、函数使用Call语句来调用存储过程,只能用输出变量返回值。一、创建存...
    99+
    2022-10-18
  • mysql存储过程和存储函数有哪些区别
    本文小编为大家详细介绍“mysql存储过程和存储函数有哪些区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“mysql存储过程和存储函数有哪些区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2022-10-19
  • oracle存储过程
    存储过程1、创建create procedure 过程名(变量名 in 变量类型...变量名 out 变量类型...)is//定义变量  注:变量类型后不需要指定大小begin//执行的语句end...
    99+
    2022-10-18
  • Oracle函数与存储过程的区别
    a、函数必须有返回值,存储过程没有返回值; b、函数可以单独执行,存储过程必须通过execute执行; c、函数可以嵌入SQL中执行,而过程不能;...
    99+
    2016-02-23
    Oracle函数与存储过程的区别
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作