美文网首页
子程序的开发:存储过程

子程序的开发:存储过程

作者: 滴滴滴9527 | 来源:发表于2018-06-24 11:11 被阅读0次

存储过程:一段存储在数据库中执行某种功能的程序,使用存储过程可以简化复杂的操作、增加数据的安全性、提高程序的性能.

一、存储过程的组成结构

create [or replace] procedure procedure_name
( 
  param_desc1,
  param_desc2  
  ...
) 
{is | as}

PL/SQL块

or replace:覆盖同名存储过程
procedure_name:存储过程的名称
param_desc:存储过程所需参数,有3类:输入参数(默认)(in)、输出参数(out)、输入输出参数(in out)
datatype:返回值的数据类型

PS:创建存储过程需要有 CREATE PROCEDURE 权限.

二、示例

1、不带参数的存储过程
create or replace procedure my_pro1 
IS

BEGIN
  DBMS_OUTPUT.PUT_LINE(systimestamp);
END my_pro1;

存储过程不需要外部数据,就可以没有参数.

2、带 in 参数的存储过程
create or replace procedure my_pro2
(
  p_pid    VARCHAR2,
  p_name   VARCHAR2,
  p_price  NUMBER, 
  p_cid    VARCHAR2 DEFAULT '1'
) 
IS

BEGIN
  INSERT INTO product(pid, NAME, price, cid)
         VALUES(p_pid, p_name, p_price, p_cid);
  COMMIT;
END my_pro2;

存储过程中需要外部数据,就需要有输入参数.

3、带 out 参数的存储过程
create or replace procedure my_pro3
(
  p_pid    IN  VARCHAR2,
  p_name   OUT VARCHAR2
) 
IS

BEGIN
  SELECT p.name INTO p_name FROM product p
         WHERE p.pid = p_pid;
         
EXCEPTION
   WHEN NO_DATA_FOUND THEN
     DBMS_OUTPUT.PUT_LINE('没有该pid的商品');
   WHEN TOO_MANY_ROWS THEN
     DBMS_OUTPUT.PUT_LINE('返回数据超过一行');
END my_pro3;

存储过程中需要输出数据时,可以使用 out 参数.

4、带 in out 参数的存储过程
create or replace procedure my_pro4
(
  v_num1   IN OUT  NUMBER,
  v_num2   IN OUT  NUMBER
) 
IS

BEGIN
  v_num1 := v_num1 - v_num2;
  v_num2 := v_num1 + v_num2;
  DBMS_OUTPUT.PUT_LINE('差是:'||v_num1);
  DBMS_OUTPUT.PUT_LINE('和是:'||v_num2);
END my_pro4;

一个参数既是输入参数,又是输出参数,就可以定义为 in out .

三、调用存储过程

1、不带参数的存储过程
2、带 in 参数的存储过程
方式1:
BEGIN
  my_pro1; 
  my_pro2('13', 'GTX 1050Ti', 1000, '1'); 
END;

方式2:使用 EXEC 命令
exec my_pro1; 
exec my_pro2('12', 'GTX 940M', 666.66, '1'); 
3、带 out 参数的存储过程
4、带 in out 参数的存储过程

调用有输出参数的存储过程,必须传入变量接受输出参数的数据

DECLARE
  v_name  VARCHAR(20);
  v_num1  NUMBER := 666;
  v_num2  NUMBER := 111;

BEGIN
  my_pro3('1', v_name);
  DBMS_OUTPUT.PUT_LINE(v_name);
   
  my_pro4(v_num1, v_num2); 
END;

四、存储过程的修改、删除

存储过程的修改:使用 replace 关键字
存储过程的删除:drop procedure procedure _name

五、存储过程与函数的区别

区别在于:函数可以有一个返回值,而存储过程没有,但是存储过程与函数又都可以通过 out、in out 指定一个或多个输出参数,实现返回多个值.

相关文章

  • 子程序的开发:存储过程

    存储过程:一段存储在数据库中执行某种功能的程序,使用存储过程可以简化复杂的操作、增加数据的安全性、提高程序的性能....

  • PL/SQL之存储过程

    存储过程、存储函数和触发器 存储过程和存储函数定义:指存储在数据库中供所有用户程序调用的子程序叫存储过程或存储函数...

  • Oracle之存储过程与存储函数

    存储过程和存储函数指存储在数据库中供所有用户程序调用的子程序叫存储过程或者存储函数;存储过程和存储函数相同点:完成...

  • Oracle存储过程与存储函数-入门

    一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解...

  • Oracle PL/SQL (10) - 存储过程的创建和调用

    子程序包括存储过程和函数。子程序包括:1、声明部分:声明部分包括类型、游标、常量、变量、异常和嵌套子程序的声明。这...

  • 存储过程与存储函数

    根据慕课网课程Oracle存储过程和自定义函数整理 1.概念 (1)定义:存储在数据库中供所有用户程序调用的子程序...

  • 子程序(存储+函数)

    子程序 定义 分类 组成 优点 过程(Procedure) 备注:当指定参数数据类型时,不能指定该参数类型的长度(...

  • mybatis中使用mysql存储过程注意事项

    1、navicat创建开发存储过程注意事项: 2、springboot + mybatis中调用存储过程(多个in...

  • 伪代码编写过程(三)

    《代码大全2》阅读随笔 通过伪代码编程过程创建子程序 如何设计子程序 检查先决条件; 定义子程序要解决的问题; 为...

  • MySQL This function has none of

    解决方法: 解决办法也有两种, 第一种是在创建子程序(存储过程、函数、触发器)时,声明为DETERMINISTIC...

网友评论

      本文标题:子程序的开发:存储过程

      本文链接:https://www.haomeiwen.com/subject/hjfjyftx.html