精华内容
下载资源
问答
  • 存储过程是一个SQL语句集合,...一:创建存储过程MariaDB [test2]> delimiter //MariaDB [test2]>create procedure p1() #创建存储过程-> begin select * froma;-> end //Query OK, 0 rows affected (0...

    存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。

    一:创建存储过程

    MariaDB [test2]> delimiter //MariaDB [test2]>create procedure p1() #创建存储过程-> begin select * froma;-> end //Query OK, 0 rows affected (0.00sec)

    MariaDB [test2]>call p1() #调用存储过程->;-> //

    +------+

    | name |

    +------+

    | 1 |

    | 2 |

    | 3 |

    | 4 |

    +------+

    4 rows in set (0.00sec)

    Query OK, 0 rows affected (0.00sec)

    MariaDB [test2]>

    二:创建存储过程(带参数)

    对于存储过程,可以接收参数,其参数有三类:

    in          仅用于传入参数用

    out        仅用于返回值用

    inout     既可以传入又可以当作返回值

    delimiter $

    MariaDB [test2]>create procedure p2(-> ini1 int,-> ini2 int,->inout i3 int,->out r1 int->)->begin->declare temp1 int;->declare temp2 int default 0;-> set temp1=1;-> set r1=i1+i2+temp1+temp2;-> set i3=i3+100;->end $

    delimiter ;

    set @t1=4;

    set @t2=0;

    call p2(1,2,@t1,@t2);

    select @t1,@t2;

    MariaDB [test2]> select @t1,@t2;

    +------+------+

    | @t1 | @t2 |

    +------+------+

    | 104 | 4 |

    +------+------+

    1 row in set (0.01 sec)

    结果集

    delimiter //create procedure p1()

    begin

    select* fromv1;

    end//delimiter ;

    结果集+out

    delimiter \

    create PROCEDURE p1(

    OUT p_return_code tinyint

    )

    BEGIN

    DECLARE exit handlerforsqlexception

    BEGIN--ERROR

    set p_return_code= 1;

    rollback;

    END;

    DECLARE exit handlerforsqlwarning

    BEGIN--WARNING

    set p_return_code= 2;

    rollback;

    END;

    START TRANSACTION;

    DELETEfromtb1;

    insert into tb2(name)values('seven');

    COMMIT;--SUCCESS

    set p_return_code=0;

    END\

    delimiter ;

    游标

    delimiter //create procedure p3()

    begin

    declare ssid int;--自定义变量1

    declare ssname varchar(50); --自定义变量2

    DECLARE done INT DEFAULT FALSE;

    DECLARE my_cursor CURSOR FOR select sid,snamefromstudent;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;

    open my_cursor;

    xxoo: LOOP

    fetch my_cursor into ssid,ssname;ifdone then

    leave xxoo;

    END IF;

    insert into teacher(tname) values(ssname);

    end loop xxoo;

    close my_cursor;

    end//delimter ;

    动态执行

    delimiter \

    CREATE PROCEDURE p4 (innid int

    )

    BEGIN

    PREPARE prod FROM'select * from student where sid > ?';

    EXECUTE prod USING @nid;

    DEALLOCATE prepare prod;

    END\

    delimiter ;

    三:删除存储过程

    drop procedure proc_name;

    四:执行存储过程

    --无参数

    call proc_name()--有参数,全in

    call proc_name(1,2)--有参数,有in,out,inout

    set @t1=0;

    set @t2=3;

    call proc_name(1,2,@t1,@t2)

    五:pymysql调用存储过程

    #!/usr/bin/env python#-*- coding:utf-8 -*-

    importpymysql

    conn= pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')

    cursor= conn.cursor(cursor=pymysql.cursors.DictCursor)#执行存储过程

    cursor.callproc('p1', args=(1, 22, 3, 4))#获取执行完存储的参数

    cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")

    result=cursor.fetchall()

    conn.commit()

    cursor.close()

    conn.close()print(result)

    展开全文
  • 数据库储存过程

    2019-09-04 11:21:27
    SQL语句在创建过程时进行分析和编译。 存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划,这样,在执行过程时便可节省此开销。 2降低网络开销 ...

    转发转发

    存储过程的优点和缺点

    优点:

    1提高性能
    SQL语句在创建过程时进行分析和编译。 存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划,这样,在执行过程时便可节省此开销。

    2降低网络开销
    存储过程调用时只需用提供存储过程名和必要的参数信息,从而可降低网络的流量。

    3便于进行代码移植
    数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。

    4更强的安全性
    1)系统管理员可以对执行的某一个存储过程进行权限限制,避免非授权用户对数据的访问
    2)在通过网络调用过程时,只有对执行过程的调用是可见的。 因此,恶意用户无法看到表和数据库对象名称、嵌入自己的 Transact-SQL 语句或搜索关键数据。
    3)使用过程参数有助于避免 SQL 注入攻击。 因为参数输入被视作文字值而非可执行代码,所以,攻击者将命令插入过程内的 Transact-SQL 语句并损害安全性将更为困难。
    4)可以对过程进行加密,这有助于对源代码进行模糊处理。

    劣势:

    1逻辑处理吃力
    SQL本身是一种结构化查询语言,但不是面向对象的的,本质上还是过程化的语言,面对复杂的业务逻辑,过程化的处理会很吃力。同时SQL擅长的是数据查询而非业务逻辑的处理,如果如果把业务逻辑全放在存储过程里面,违背了这一原则。

    2修改参数复杂
    如果需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新调用,等等,这时候估计会比较繁琐了。

    3开发调试复杂
    由于IDE的问题,存储过程的开发调试要比一般程序困难。

    4无法应用缓存
    虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。

    5不支持群集
    数据库服务器无法水平扩展,或者数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。

    展开全文
  • 1. 使用sqlconnoction关键字先创建数据库的链接字符串 2. 打开数据库 3. 执行的储存过程名称和指定相应的类型 4. 使用paraneterdirection.outpt定义数组变量并赋值,和声明输出参数 5. 把数组中的数据传到...

    1.      使用sqlconnoction关键字先创建数据库的链接字符串

    2.      打开数据库

    3.      执行的储存过程名称和指定相应的类型

    4.      使用paraneterdirection.outpt定义数组变量并赋值,和声明输出参数

    5.      把数组中的数据传到储存过程

    6.      接受返回的参数

     


    展开全文
  • 1.在数据库创建删除的存储过程create proc proc_DelStudent@studentId intasbegindelete from tb_Students where studentId=@studentIdreturn 100end2.在类dal_sql中创建 执行增删除存储过程的方法public void ...

    1.在数据库中创建删除的存储过程

    create proc proc_DelStudent

    @studentId int

    as

    begin

    delete from tb_Students where studentId=@studentId

    return 100

    end

    2.在类dal_sql中创建 执行增删除存储过程的方法

    public void ExcuteProc(string 存储过程名,SqlParameter[] pars//存储过程中用到的参数)

    {

    conn = GetConn();获取数据库连接

    SqlCommand cmd = new SqlCommand(存储过程名, conn);

    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddRange(pars);

    conn.Open();

    cmd.ExecuteNonQuery();

    conn.Close();

    }

    #endregion

    调用存储过程

    public int DelStudent(int id)

    {

    SqlParameter[] pars = new SqlParameter[2];

    pars[0] = new SqlParameter("@studentId", id);

    pars[1] = new SqlParameter("returnValue", SqlDbType.Int);

    pars[1].Direction = ParameterDirection.ReturnValue;

    dal_sql.ExcuteProc("proc_DelStudent", pars);

    return (int)pars[1].Value;

    }

    取消

    评论

    展开全文
  • 数据库储存过程超简单实例

    千次阅读 2018-06-15 15:32:20
    网上看了半天都没找到一个完整储存过程从创建到调用的实例,于是自己写了一个简单的实例. 数据库创建存储过程,定义个函数 格式如下,开头DELIMITER //和结尾/DELIMITER 和BEGIN...1 创建储存过程函数例子(统计指定i...
  • 储存过程的优点储存过程的类型储存过程创建与执行创建 储存过程 什么是储存过程? 我们可以储存过程可以理解成数据库的子程序,在客户端和服务端可以直接调用它。 储存过程的优点 储存过程在服务器端运行,执行...
  • 如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,...其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。值得一提的是,在...
  • 存储过程是指,在大型数据库系统中,为了提高数据库操作的效率和SQL代码的封装,完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后,再次调用不需要再次编译,用户只需指定存储过程名字并给定参数就可以...
  • 数据库之存储过程的账户储存实例 **内容 ** 利用存储过程实现下面的应用:从账户1转指定数额的款项到账户2中,假设账户关系表为account(accountnum,total), accountnum为账号, total为余额。 代码实现 create ...
  • 首先我们了解一下储存过程的优缺点: 优点: ①:存储过程有助于提高应用程序的性能。 ②:存储过程有助于减少应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的SQL语句,而只能发送存储过程的名称...
  • 存储过程是一个SQL语句集合,...一:创建存储过程MariaDB [test2]> delimiter //MariaDB [test2]>create procedure p1() #创建存储过程-> begin select * froma;-> end //Query OK, 0 rows affected (0...
  • 一. 创建数据库表 1.有表的话,不需要创建表,需要向哪个表中循环插入数据记住表名即可。 2.无表的话,根据需求创建... 创建储存过程 DROP PROCEDURE IF EXISTS pro1; //如果有创建过储过程删除,无则创建 DELIMITER $
  • 查看所有的数据库信息- 查看当前使用的数据库- 删除数据库操作数据表- 查看当前数据库所有表的信息- 查看表结构的信息- 查看表的建表语句备份与恢复数据库恢复内置函数流程控制自定义函数存储过程视图视图优点:...
  • 为了完成特定功能的SQL语句集定义: 储存在数据库中, 用户通过指定储存过程的名字并给出参数(带有参数的)来执行它声明: 储存过程是数据库中一个重要的对象,类似于PHP,js 中的函数创建储存过程create procedure 名称...
  • MySQL储存过程

    2019-01-22 16:28:00
    1.创建储存过程创建储存过程一般有两种,一种是带参数,一种是不带参数。  1.不带参数:创建储存过程:delimiter// 自定义语句结尾符,因为这里要执行好多句SQL语句,所以要自定义,防止出错 ...
  • 储存过程

    2019-12-09 18:48:57
    储存过程是一组为了完成特定功能的SQL语句表,经过编译后储存在...它在数据库创建并保存,一般由SQL语句和一些特殊控制的结构组成,当希望在不同的平台或者应用程序执行相同的特定功能时,有储存过程是合适的...
  • 1:获取当前数据库中的所有用户表 select Name from sysobjects where xtype='u' and status>=0 2:获取某一个表的所有字段 ...3:查询用户创建的所有数据库 select * from master..sysdatabases D w
  • 数据库之存储过程

    2010-01-08 00:41:00
    储存过程是执行某些操作的子程序,它是执行特定任务的模块.从根本上讲,过程就是命名的 PL/SQL 块,它可以被赋予参数,储存在数据库中由一个应用程序或其它 PL/SQL 程序调用.--创建存储过程格式create [or replace...
  • 动态SQL 使用SQL语句主变量 EXEC SQL BEGIN DECLARE SECTION;.../*SQL语句主变量,内容是创建表的SQL语句*/ EXEC SQL END DECLARE SECTION; EXEC SQL EXECUTE IMMEDIATE:stmt;/*执行准备好的语句,...
  • 本章内容视图函数创建函数多行定义函数自定义函数中定义局部变量语法为变量赋值语法存储过程存储过程示例流程控制触发器触发器示例触发器查删 视图 VIEW,虚表,保存有实表的查询结果 创建方法: 格式 CREATE VIEW ...
  • 今天的内容是: python 操作MySQL说到数据库,可能有些朋友没有学过MySQL数据库语句语法,不过没关系,python中操作数据库储存数据,也就是创建一个表格,然后向表格中插入数据的过程,没有多少内容的,数据库表格最...
  • --用储存过程实现对数据库表的增 删 改 --wuyisky create table proceduretest --创建表([id] int,[name] varchar(100),age int,brithday Datetime)select * from proceduretest --查询create procedure dt_...
  • 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 2、创建存储过程 ...
  • 储存过程和储存函数是在数据库中定义好的一些...创建储存过程 语法如下 CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 参数 说明 sp_name 储存过程的名称 pro...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 373
精华内容 149
关键字:

数据库创建储存过程