精华内容
下载资源
问答
  • mysql数据库创建带输入参数的存储过程,创建成功,执行''call语句失败
  • mySQL数据库开发视频培训课程:该教程为你讲解MySQL各个功能点,从入门到应用实战,涉及内容有mysql数据完整性、用户自定义函数、Mysql试图、存储过程、触发器、索引、事务和锁。...

    立即学习:https://edu.csdn.net/course/play/4364/77161?utm_source=blogtoedu

    # 查找指定班级、平均分最高前两名学生,使用输入参数
    create procedure getmaxByClass (in c varchar(20))
    begin
    select a.Sname 姓名, a.class 班级, avg(b.smark) 平均分
    from TStudent a join TScore b on a.StudentID=b.StudentID
    where a.class=c 
    group by a.StudentID
    order by avg(b.smark) desc limit 2;
    end
    
    call getmaxByClass('java')
    # 根据输入的班级找到该班学号最大的学生的学号,学号存储到输出参数
    create PROCEDURE getmaxSIDbyClass(in c varchar(20), out maxSID int)
    begin
    select MAX(studentID) into maxSID from TStudent where class = c 
    end
    
    # 调用和查看输出参数
    call getmaxSIDbyClass('java', @maxsid)
    select @maxsid
    

     

    展开全文
  • 一、存储过程 1、存储过程---就像数据库中...执行速度更快:在数据库中保存的存储过程语句都是编译过的,运行时无需再次编译。 允许模块化程序设计:类似方法的复用。 提高系统安全性:防止SQL注入。 减少网络...

    一、存储过程

    1、存储过程---就像数据库中运行方法(函数)

    2、和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果

    3、前面学的if else/while/变量 等,都可以在存储过程中使用。

    4、优点:

    • 执行速度更快:在数据库中保存的存储过程语句都是编译过的,运行时无需再次编译。
    • 允许模块化程序设计:类似方法的复用
    • 提高系统安全性:防止SQL注入
    • 减少网络流通量:当应用程序和数据库在不同的服务器上时,只需传输存储过程名。

    5、系统存储过程

    • 由系统定义,存放在master数据库中。
    • 名称以“sp_”开头或”xp_”开头

    6、自定义存储过程:由用户在自己的数据库中创建的存储过程。

    二、系统存储过程

    代码:

    EXEC sp_databases  //列出服务器上的所有数据库,包括系统数据库。
    EXEC  sp_renamedb 'Northwind','Northwind1'
    EXEC sp_tables
    EXEC sp_columns stuInfo  
    EXEC sp_help stuInfo
    EXEC sp_helpconstraint stuInfo
    EXEC sp_helpindex stuMarks
    EXEC sp_helptext 'view_stuInfo_stuMarks' 
    EXEC sp_stored_procedures

    三、创建存储过程

    7、定义存储过程的语法

        CREATE  PROC[EDURE]  存储过程名 
        @参数1  数据类型 = 默认值 OUTPUT,
        @参数n  数据类型 = 默认值 OUTPUT
        AS
          SQL语句

    8、参数说明:

    • 参数可选
    • 参数分为输入参数、输出参数
    • 输入参数允许有默认值

    9、调用系统存储过程和自定义存储过程都是同样的语法:EXEC  过程名  [参数]

    10、例:编写分页存储过程

    --编写分页存储过程
    create procedure proGetPageData
    @pageIndex int,
    @pageSize int
    as
    declare @sqlStr varchar(300)
    set @sqlStr='select top '+str(@pageSize)+' * from Category where c_id not in(select top '+str((@pageIndex-1)*@pageSize)+' c_id from Category order by c_addtime)order by c_addtime'
    print @sqlStr
    EXEC(@sqlStr)
    
    execute proGetPageData 3,3

    四、编写存储过程

    11、编写存储过程usp_GetBookByCid

    12、要求传入参数:@categoryId int   ,调用存储过程,传入分类ID,查处属于该分类的书籍列表。

    五、调用带参数的存储过程

    13、无参数的存储过程调用

    Exec pro_GetAge

    14、有参数的存储过程两种调用法

    EXEC proGetPageData 60,55 ---按次序
    
    EXEC proGetPageData @labPass=55,@writtenPass=60 --参数名

    15、参数有默认值时

    EXEC proGetPageData --都用默认值 
    EXEC proGetPageData 1  --页容量(@pageSize)默认值 
    EXEC proGetPageData 1,5   --不用默认值

    问题:如果我只想设置页容量(第二个参数),页码使用默认值呢?怎么办?

    EXEC proGetPageData @pageSize=10

    六、存储过程中使用输出参数

    16、如果希望在存储过程中查询当前页对应的结果集,而且还想产生总页数呢

    create procedure [dbo].[proGetPageData2] –带输出参数的存储过程
    @pageIndex int=1,
    @pageSize int=3,
    @pageCount int output, --总页数
    @rowCount int output -- 总行数
    as
    declare @sqlStr nvarchar(300),@sqlCount nvarchar(300)
    SET @sqlCount = 'SELECT @rowCount=COUNT(b_id),@pageCount=CEILING((COUNT(b_id)+0.0)/'+ CAST(@pageSize AS VARCHAR)+') FROM Book'
    print @sqlCount
    EXEC SP_EXECUTESQL @sqlCount,N'@rowCount INT OUTPUT,@pageCount INT OUTPUT',@rowCount OUTPUT,@pageCount OUTPUT
    set @sqlStr='select top '+str(@pageSize)+' * from Category where c_id not in(select top '+str((@pageIndex-1)*@pageSize)+' c_id from Category order by c_addtime)order by c_addtime'
    print @sqlStr
    EXEC(@sqlStr)
    
    declare @pc int
    declare @rc int
    exec [proGetPageData2] 1,3,@pc output,@rc output
    select @pc,@rc

    17、存储过程汇总:

    • (1)在SQL server2008中,存储过程在数据库中的“可编程性”里面,可编程性、表、视图等是并列关系。
    • (2)只要调用了存储过程的名称,就会执行begin  end中的所有代码。过程名相当于C#中的方法名,begin  end相当于大括号,begin  end中的内容相当于方法体。
    • (3)系统存储过程和自定义存储过程两种。
    • (4)调用系统存储过程和自定义存储过程都是同样的语法:exec 过程名 参数值
    • (5)修改存储过程:alter  proc  过程名  。(修改的是存储过程里的具体代码)。
    • (6)第一次创建用create,后面的修改都用alter  。

     

    18、通过row_number()的分页方式存储过程:

    (1)分页代码示例,这里获取到第1页:

    select  *  from
    (
    select  row_number()  over  (order  by  c_id)  as  r1,*  from  Category
    )  as  a
    where  a.r1<=5

    (2)简单的分页存储过程代码示例,每页5条记录:(要显示第二页时的调用代码:exec  usp_GetPageBooks  2)

    alter  proc  usp_GetPageBooks
    @pageIndex  int  1  //默认显示第一页。
    as
    select  *  from
    (
    select  row_number()  over  (order  by  c_id)  as  r1,*  from  Category
    ) as  a
    where  a.r1>(@pageIndex-1)*5  and  a.r1<=@pageIndex*5

    (3)传入页码和每页大小两个参数:

    alter  proc  usp_GetPageBooks
    @pageIndex  int  1  --默认显示第一页。
    @pageSize  int  5  --默认每页有5行。
    as
    select  *  from
    (
    select  row_number()  over  (order  by  c_id)  as  r1,*  from  Category
    ) as  a
    where  a.r1>(@pageIndex-1)* @pageSize  and  a.r1<=@pageIndex*@pageSize
    调用:exec  usp_GetPageBooks  1  --调用第一页,每页5行。
    
    --传入第一个参数,第二个参数用默认值。
    usp_GetPageBooks  2  --调用第二页,每页5行。
    exec  usp_GetPageBooks  1,3  --调用第一页,每页3行
    
    --传入两个参数,按照传入参数的顺序先后赋值。
    exec  usp_GetPageBooks  2,3  --调用第二页,每页3行
    exec  usp_GetPageBooks  4,10  --调用第4页,每页10行
    exec  usp_GetPageBooks  @pageIndex=1, @pageSize=3 --显示传参,调用第一页,每页3行
    exec  usp_GetPageBooks  @pageIndex=3, @pageSize=3  --调用第三页,每页3行
    exec  usp_GetPageBooks  @pageSize=6, @pageIndex=7  --调用第7页,每页6行。
    
    --显示传参时,参数顺序可以不用考虑。
    exec  usp_GetPageBooks  @pageSize=8  --调用第1页,每页8行。
    --只传部分参数时,剩下的参数使用默认值。
    --等等,以此类推。

    19、输入参数和输出参数:输入参数传的是参数的复制品,所以对参数本身无影响。输出参数传的是参数的引用(地址),所以参数本身会随着输出参数的改变而改变。

    20、几个存储过程相关的重要知识点:

    convert(float,@rowCount)  --把int类型的局部变量@rowCount转换为float型。
    convert(float,@pageSize)  --把int类型的局部变量@pageSize转换为float型。
    ceiling(convert(float,@rowCount)/convert(float,@pageSize))  --ceiling是把紧跟其后的小数型进行进一法运算。

     

    展开全文
  • 创建一个带参数的存储过程,名字为“teacherproc”,当输入任意一个“老师名字”时,该存储过程输出该系所有教师的编号,姓名,性别
  • 通常的存储过程虽然也可以带参数,但是如果你的存储...下面是用表名做参数的存储过程创建: ? 1 2 3 4 5 6 7 CREATE  PROCEDURE SpecialInsertProcedure   @TableName  varchar(50

    通常的存储过程虽然也可以带参数,但是如果你的存储过程的参数是表名、字段名、数据库名之类的时候,通常的方法就行不通了!

    下面是用表名做参数的存储过程创建:

    1
    2
    3
    4
    5
    6
    7
    CREATE   PROCEDURE   SpecialInsertProcedure   
        @TableName   varchar(50),  
        @userId   varchar(10),   
        @pwd   varchar(10),   
        @userRole int
    AS   
      exec('insert into '+@TableName +'(userId,pwd,userRole)   values   ('''+@userId+''','''+@pwd+''','+@userRole+')')
    1
    其中的TableName是表名,userId,pwd,userRole是表中的字段。对应的@TableName是传递到存储过程的表名变量,
    1
    @userId,@pwd,@userRole是需要插入表中的数据;
    1
    需要注意的是单引号的使用方法,这里用两个<SPAN style="TEXT-DECORATION: underline">   ''   </SPAN>代替字符串里面的一个 <SPAN style="TEXT-DECORATION: underline"> ' </SPAN>  其实就是有一个<SPAN style="TEXT-DECORATION: underline"> '  </SPAN> 当作了专业字符。
    1
    对应的该存储过程的执行为:
    1
    exec SpecialInsertProcedure  UserInfo,sss,sss,1

     

    http://www.cnblogs.com/lxyFight/articles/1710515.html

    展开全文
  • 我们都知道,现在MySQL版本,可以支持存储过程了。我使用是MySQL5.5版本。 1,创建存储过程 delimiter $ create procedure in_out_procedure(in procedure_id int,out count_number int) begin ...

    我们都知道,现在MySQL的版本,可以支持存储过程了。我使用的是MySQL5.5的版本。


    1,创建存储过程


    delimiter $

    create procedure in_out_procedure(in procedure_id int,out count_number int)
    begin
    select count(*) into count_number from temp_url where id=procedure_id;
    end $

    delimiter ;

    注意:delimiter $ 改变分隔符,MySQL数据库中,使用delimiter 关键字来改变分隔符,当我们在创建触发器或者存储过程的时候,经常会用到。


    2,执行存储过程:


    call in_out_procedure(1,count_number);
    MySQL如何调用带参数的存储过程?
    call in_out_procedure(1,@param1);

    select @param1;

    注意,带有输出out的存储过程,我们在使用时,需要先获得输出结果,这里我们使用参数param1,相当于是接收返回结果,然后就可以使用这个返回结果了。


    3,再来看下面的例子:


    delimiter $
    create procedure out_procedure(out count_number int)
    begin
    select count(*) into count_number from temp_url where id=1;
    end $
    delimiter ;

    执行存储过程:
    call out_procedure(@param1);
    select @param1;

    4,如何查询数据库中所有的存储过程?


    第一种方式:show procedure status;


    第二种方式:select name from mysql.proc where db="test" and type="procedure";


    通过第一种方式,可以查询当前数据库中所有的存储过程的详细信息,但是不包含创建存储过程的语句;
    通过第二种方式,可以查询制定数据库中所有的存储过程的名称;
    然后根据存储过程的名称,我们就可以查询这个存储过程的创建语句了,用下面的语法:
    show create procedure procedure_name;
    例如,我们要查询名称为:in_out_procedure的存储过程,就这样写:

    show create procedure in_out_procedure;



    展开全文
  • 存储过程 含义:一组预先编译好sQL语句集合...CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法SQL语句) END 注意: 参数列表包含三部分: 参数模式 参数参数类型 举例: IN stuname VA...
  • 带参数的存储过程

    2016-05-26 19:45:20
    系统的存储过程以sp_开头,扩展的存储过程以xp_开头,自定义不要使用。 我理解到的优点:1.提高数据库执行速度。存储过程只在最初的时候编译即可,以后每次执行都不需要重新编译。存储过程创建后,它的名字就存储在...
  • 在sql server2000/2005中创建LSystem数据库,包含t_users表(user_no,user_name,user_pwd),这都是上次...创建存储过程lend_limit(写得比较简单,只是演示, 呵呵) //参数mount可以去掉 create procedure lend_l...
  • 创建、调试存储过程。你可以在数据库中也可以在其他外挂程序支持下进行存储过程的创建和调试工作
  • 数据库实验——触发器与...1、创建一个不带参数的简单存储过程 (1)创建存储过程sp_avggrade,实现查询每门课程学生的平均成绩的功能; create PROC sp_avggrade as begin select AVG(grade) from sc group by ...
  • ------1.系统存储过程 exec sp_databases 返回当前实列中的所有数据库的基本信息 exec sp_tables 返回当前数据库下的所有表和视图 exec sp_columns '表名' 返回某个表...------创建自己的存储过程 create proc usp...
  • c#调用Mysql带参数的存储过程

    千次阅读 2015-09-14 15:42:31
    1.首先创建一个带参数的存储过程存储过程名称=proc_bookinfo 存储过程2个参数 一个in 一个out in参数名称=ispay out参数名称=unPaycount这个存储过程 根据传入的未支付字段名称 输出未支付的商品数量DELI
  • 存储过程的创建变量 use 库名 go create procedure 存储过程名 AS begin 存储过程 end go 变量 use 库名 go create procedure 存储过程名 @变量名 变量类型 AS begin 存储过程 end go 存储过程的修改 ...
  • 1、调用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列。不带参数的 call 转义序列的语法如下所示: {call procedure-name} 作为实例,在 SQL Server 2005 ...
  • 数据库的存储过程

    2019-07-16 01:54:40
    SQL语句需要先编译然后执行,而存储过程是一组为了完成特定功能SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带参数)来调用执行它。 存储过程是可编程函数,...
  • 带参数的存储过程 存储过程允许带有参数,参数的使用将增加存储过程的灵活性,给数据库编程带来极大的方便。 存储过程中如果使用了参数,在执行存储过程时必须为其指定参数。总的来说,参数可以是常量、变量和表达式...
  • MySQL数据库存储过程讲解与实例

    万次阅读 多人点赞 2018-06-03 00:48:17
    SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带参数)来调用执行它。...
  • 达梦数据库的存储过程

    千次阅读 2019-12-11 19:56:17
    达梦数据库的存储过程 数据库的存储过程是非常好的一个功能,有用过oracle存储过程的同学再来写达梦的存储过程就非常容易。说说存储过程的优点: 1.让业务执行效率更高,因为语句在存储过程都是编译好的,执行速度...
  • 有输入参数的存储过程 调用存储过程 方法一 方法二 练习存储过程之存储数据 练习存储过程之通过编号查询员工姓名及工资 练习存储过程的运行序列序列的创建、使用、删除--序列的创建 create sequence seq_tem_user ...
  • 有输入参数的存储过程

    千次阅读 2015-08-08 23:12:57
    创建带有输入参数的存储过程: drop procedure if exists proc_user_in; delimiter // create procedure proc_user_in(in a int) begin select * from user where userid > a; end// delimiter ;以上代码即在当前...
  • 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带参数)来执行它。存储...
  • 数据库学习之——存储过程

    千次阅读 2019-03-23 23:08:10
    存储过程的学习存储过程的概念创建简单的存储过程创建带输入参数及默认值的存储过程创建带有通配符参数的存储过程创建带有输出参数的存储过程创建带表值参数的存储过程创建带变量的存储过程创建可捕获异常的存储过程...
  • mysql 有无参数的存储过程

    千次阅读 2016-11-10 20:09:05
    SQL中调用存储过程语句:call procedure_name();...2、仅有输入参数的存储过程:{call procedure_name(?,?…)}。 这里?表示输入参数,创建存储过程时用in表示输入参数 3、仅有输出参数的存储过程:{cal
  • 创建不带参数的存储过程2.创建带输入参数的存储过程3.创建带输入、输出参数的存储过程二、查看存储过程1.使用SHOW STATUS语句查看存储过程的状态2.从information_schema.Routines表中查看存储过程的信息三、定义...
  • 数据库存储过程

    2016-12-16 16:47:56
    存储过程就是存储在数据库服务器中一组为了完成特定功能sql语句集,经编译后存储在数据库中,用户通过指定存储过程名称并给出参数存储过程带参数)来执行它。 存储过程的作用 存储例成包括存储过程和存储...
  • 因为工作中涉及到了参数模式的存储过程,所以就说这一块吧,不过我到现在也没搞明白,参和不参有啥具体区别,还望大家相互帮助,可以留言讨论。 首先创建一个需要传入表名的存储过程,代码如下 create or re
  • 数据库笔记11:创建与管理存储过程

    千次阅读 2018-03-05 21:24:12
    /***************************** 第十一单元 创建与管理存储过程******************************//* 知识点学习:参看教材P210. 1、什么叫存储过程?...*//* 任务一、创建和执行不带参数的存储过程(proce...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,397
精华内容 558
关键字:

数据库创建带参数的存储过程