iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >涉及存储过程的问题
  • 378
分享到

涉及存储过程的问题

涉及存储过程的问题 2020-10-31 19:10:42 378人浏览 才女
摘要

存储过程(特定功能的sql语句集)   一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中一个重要对象。 1.创

存储过程(特定功能的sql语句集)

  一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中一个重要对象。

1.创建存储过程:

  create procedure 存储过程名称 ([存储过程参数列表]) [存储过程特性] SQL代码内容

1 例:delimiter  //
2         create procedure proc()
3         begin
4         select * from userinfo;
5       end  //
6       delimiter;

2.创建存储函数:

  create function 存储函数名称 ([存储过程参数列表]) returns type [存储函数特性] SQL代码内容

1 例:delimiter //
2         create function NameByZip()
3         returns char(50)
4         return (select username from userinfo where userage="23");
5       //
6       delimiter;

3.变量的使用

  1)定义变量:declare 局部变量名称,...数据类型 [default value];

    例:declare myparam int default 100;

  2)为变量赋值:set 局部变量名称=expr,var_name=expr,...;

    例:declare var1,var2 int;

      set var1=10,var2=10;

4.定义条件和处理程序

  1)定义条件:declare 条件名称 condition for  sqlstate "xxxx";

          declare 条件名称 condition for xxxx;

  2)定义处理程序:捕获 sqlstate_value: delcare continue handler for sqlstate "xxxx" set @info="no_such_table";

            捕获 Mysql_error_code: declare continue handler for xxxx set @info="no_such_table";

5.光标的使用

  1)声明光标:declare 光标名称 cursor for SQL语句;

  2)打开光标:open 光标名称;

  3)使用光标:fetch 光标名称 into 字段名,...;

  4)关闭光标:close 光标名称;

6.流程控制语句

  if语句:if val is null then select "val is null";  

      else select "val is not null";  

      end if;

  case语句:case val

        when 1 then select "val is 1";

        when 2 then select "val is 2";

        else select "val is not 1 or 2";

       end case;

  loop语句:declare id int default 0;

       add_loop:loop;

       set id = id + 1;  

        if id>=10 then leave add_loop;

        end if;

       end loop add_loop;

  leave语句:退出循环语句

  iterate语句:重新执行循环

  repeat语句:declare id int default 0;

        repeat

        set id = id + 1;

        until id >= 10;  ##先执行后判断

        end repeat;

  while语句:declare id int default 0;

       while id >=10 do  ##先判断后执行

       set id = id+1;

       end while;

7.调用存储过程和调用存储函数

  call 存储过程名称(存储过程定义的参数)

  select 存储函数名称(存储过程定义的参数)

8.查看存储过程和函数

  show {procedure | function} status like "x%" 语句查看存储过程和函数的状态

  show create {procedure | function} 存储函数名称 语句查看存储过程和函数的定义

9.修改存储过程和函数

  alter {procedure | function}存储函数名称 (存储过程特性)

10.删除存储过程和函数

  drop {procedure | function} [if exists] 存储函数名称

存储过程优缺点:

  优点:

    1)存储过程因为SQL语句已经预编译过了,因此运行的速度比较快;

    2)存储过程在服务器端运行,减少了客户端的压力。

    3)允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用;

    4)减少网络流量,客户端调用存储过程只需要传存储过程名和相关参数即可,与传输SQL语句相比自然数据量少了很多;

    5)增强了使用的安全性,充分利用系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。程序员直接调用存储过程根本不知道表结构是什么,有什么字段,没有直接暴露表名以及字段名给程序员。

  缺点:

    调试麻烦(至少没有像开发程序那样容易),可移植性不灵活(因为存储过程是依赖于具体的数据库)。

存储过程优化思路:

  1)尽量利用一些SQL语句来代替一些小循环,例如聚合函数、求平均函数等。

  2)中间结果存放于临时表,加索引

  3)少使用游标。SQL是一个集合语言,对于集合运算具有较高的性能。而cursors是过程运算,比如对一个100万行数据进行查询,游标需要读表100万次,而不是使用游标则只需要少量几次读取。

  4)事务越短越好,SQL Server支持并发操作,如果事务过多过长或隔离级别过高,都会造成并发阻塞、死。导致查询极慢,CPU占用率极低。

  5)使用try...catch处理异常;

  6)查询语句尽量不要放在循环内;

 

您可能感兴趣的文档:

--结束END--

本文标题: 涉及存储过程的问题

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

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

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

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

下载Word文档
猜你喜欢
  • oracle查询存储过程里面涉及的表有哪些
    要查询存储过程涉及的表:连接到数据库。查询 all_object_tables 视图,过滤出存储过程涉及的表(object_name 与存储过程 object_name 匹配,排除临时表...
    99+
    2024-04-19
    oracle
  • MySQL存储过程的权限问题小结
    MySQL的存储过程,没错,看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单,需要开通一些权限。 本来是一个很正常的操作,但在我来看是比较着急且紧迫的,说来惭愧,忙着方向规划和开发的事情,这...
    99+
    2024-04-02
  • 如何解决mysql存储过程太慢的问题
    小编给大家分享一下如何解决mysql存储过程太慢的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql存储过程太慢的解决...
    99+
    2024-04-02
  • 如何处理MySQL存储过程的权限问题
    这篇文章主要介绍如何处理MySQL存储过程的权限问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! MySQL的存储过程,没错,看起来好生僻的使...
    99+
    2024-04-02
  • MYSQL存储过程权限问题的示例分析
    这篇文章主要介绍了MYSQL存储过程权限问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。   MYSQL数据...
    99+
    2024-04-02
  • MySQL存储过程中的sql_mode问题怎么处理
    这篇文章主要介绍MySQL存储过程中的sql_mode问题怎么处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在my.cnf中设置了sql_mode='STRICT_TRA...
    99+
    2024-04-02
  • mysql通过存储过程解决ERROR 1060 (42S21): Duplicate column的问题
    问题描述 实际的日常开发工作中,经常需要对现有表的结构作出变更,涉及到sql相关的操作,基本都通过初始化脚本来完成,如果初始化脚本运行失败或者遇到其他问题,可能导致sql部分执行,不分失败的问题,从而造成这个ERROR 1060 (42S2...
    99+
    2023-09-30
    mysql 数据库
  • 如何解决Linq存储过程返回问题
    这篇文章主要为大家展示了“如何解决Linq存储过程返回问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Linq存储过程返回问题”这篇文章吧。存储过程在我们编写程序中,往往需要一些存储过...
    99+
    2023-06-17
  • MySQL存储过程详解 mysql 存储过程
    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Proce...
    99+
    2024-04-02
  • MySQL存储过程及语法详解
    目录1. 存储过程基本用法1.1 概念1.2 创建存储过程1.2.1 语法格式2.2.2 语法介绍1.3 调用存储过程1.4 查看存储过程1.5 删除存储过程2. 存储过程中的语法结...
    99+
    2022-11-13
    MySQL存储过程语法 MySQL存储过程
  • Java调用存储过程事务问题怎么解决
    在Java中调用存储过程时,可以使用JDBC提供的事务管理功能来解决事务问题。以下是解决事务问题的一般步骤:1. 创建数据库连接:使...
    99+
    2023-10-24
    Java
  • 如何解决java存储过程调用servlet的授权问题
    这篇文章给大家分享的是有关如何解决java存储过程调用servlet的授权问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。写了一个java存储过程,调用远端的servlet。在java程序和function均正...
    99+
    2023-06-03
  • 关于mybatis调用存储过程获取返回值问题
    总体思路:map传值 controller: Map<String,Object> m=new HashMap<String,Object>(); ...
    99+
    2024-04-02
  • SQL Server的存储过程
    本篇内容主要讲解“SQL Server的存储过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server的存储过程”吧! 首先介绍一下什么是存储过程...
    99+
    2024-04-02
  • mysql存储过程中不能使用return的问题怎么解决
    本篇内容主要讲解“mysql存储过程中不能使用return的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql存储过程中不能使用return的...
    99+
    2024-04-02
  • mysql如何创建存储过程及函数
    这篇文章主要为大家展示了“mysql如何创建存储过程及函数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何创建存储过程及函数”这篇文章吧。1. 存储过程1.1. 基本语法create...
    99+
    2023-06-21
  • mysql创建存储过程及函数详解
    目录1. 存储过程1.1. 基本语法1.2 创建一个指定执行权限的存储过程1.3 DELIMITER 的使用2. 创建函数 1. 存储过程 1.1. 基本语法 create pr...
    99+
    2024-04-02
  • 我们如何通过MySQL存储过程访问表?
    我们可以从 MySQL 存储过程访问一个或所有表。以下是一个示例,其中我们创建了一个存储过程,它将接受表的名称作为参数,并在调用它后,将生成包含表中所有详细信息的结果集。示例mysql> Delimiter // mysql> ...
    99+
    2023-10-22
  • 关于MySQL的存储过程与存储函数
    目录初识存储过程存储过程语法存储过程调用存储函数的使用语法函数的调用对比存储函数和存储过程初识存储过程 理解:含义: 存储过程(Stored Procedure)是在大型数据库系统中...
    99+
    2023-05-19
    MySQL存储过程 MySQL存储函数
  • SQL Server存储过程
    理论知识:开始一、TRUNCATE    快速地从一堆表中删除所有行。它和在每个表上进行无条件的 DELETE 有同样的效果,不过因为它不做表扫描,因而快得多。 在大表...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作