精华内容
下载资源
问答
  • 我在我的数据库(MySQL)中创建了一些存储过程,如下所示.存储过程1CREATE PROCEDURE sp_Name1(param1,param2,......)BEGIN.....some codeIF cond THENcall sp_Name2 //Calling 2nd procedure from here.Update ...

    我在我的数据库(

    MySQL)中创建了一些存储过程,如下所示.

    存储过程1

    CREATE PROCEDURE sp_Name1(

    param1,

    param2,

    ......

    )

    BEGIN

    .....

    some code

    IF cond THEN

    call sp_Name2 //Calling 2nd procedure from here.

    Update SomeTable .....

    SELECT '1' As Result;

    END IF

    END

    存储过程2

    CREATE PROCEDURE sp_Name2(

    param1,

    param2,

    ......

    )

    BEGIN

    .....

    some code

    IF cond THEN

    SELECT '2' As Result;

    SELECT '3' As Result;

    END IF

    END

    现在我调用我的第一个存储过程如下:

    Call sp_Name1(param1, param2, ... );

    这里我在MySQL Workbench中获得了4个结果集. sp_Name2中的2个结果,sp_Name1中的update语句的第3个结果和select语句中的第4个结果,也是sp_Name1中的结果.在这里,我只是寻找最后的结果集.有时候结果序列会出现在预期的顺序中,这意味着结果可能会出现在结果1,结果2,结果4,结果3中(在这种情况下,我无法判断哪个结果集对我有用,因为最后的结果集可能被改变了.

    如何抑制不需要的结果集?

    编辑:

    我有一个用例,以便您更好地理解.

    CREATE PROCEDURE sp_LoginUser( IN Username varchar(50) , IN password varchar(50) )

    BEGIN

    IF EXISTS( SELECT 1 FROM Users where name = UserName and Pwd = password)

    SET userid = 0;

    SET loginid = 0;

    SELECT userid INTO userid

    FROM users

    WHERE name = UserName and Pwd = password;

    IF userid > 0 THEN

    CALL sp_Login(userid);

    SET loginid = LAST_INSERT_ID();

    END IF;

    //only this result i am expecting.

    IF loginid > 0 THEN

    SELECT userid as userid, loginid AS loginid;

    ELSE

    SELECT 0 userid, 0 loginid;

    END IF;

    END IF;

    END

    CREATE PROCEDURE sp_Login( IN Userid int )

    BEGIN

    INSERT Logins ( userid, datetime )

    VALUES ( Userid, now() );

    SELECT LAST_INSERT_ID() AS loginid;

    END

    所以,现在当我的用户请求登录并在我的登录页面输入他/她的用户名密码时,我就在我的服务器上调用了sp_LoginUser().在许多情况下,我必须分别调用sp_Login().

    在上面的例子中,我可以在sp_Login()过程中设置一个参数(例如,loginid)AS INOUT,为其分配LAST_INSERT_ID(),删除SELECT语句并在sp_LoginUser()中检索.

    但是当我需要单独调用sp_Login()时,我必须在编码中声明一些变量来检索值.

    展开全文
  • 假设“另一个存储过程”的名62616964757a686964616fe78988e69d8331333361323032字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个...

    展开全部

    首先需要知道“另一个存储过程”的结果集的所有列的类型。

    假设“另一个存储过程”的名62616964757a686964616fe78988e69d8331333361323032字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集

    如下

    CREATE PROCEDURE sp2

    AS

    DECLARE @t table(a int,b int,c int)

    INSERT INTO @t(a,b,c)

    EXEC sp1

    SELECT * FROM @t

    使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。

    创建存储过程

    和数据表一样,在使用之前需要创建存储过程,它的简明语法是:

    引用:

    Create PROC 存储过程名称

    [参数列表(多个以“,”分隔)]

    AS

    SQL 语句

    例:

    引用:

    Create PROC upGetUserName

    @intUserId INT,

    @ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数

    AS

    BEGIN

    -- 将uName的值赋给 @ostrUserName 变量,即要输出的参数

    Select @ostrUserName=uName FROM uUser Where uId=@intUserId

    END

    其中 Create PROC 语句(完整语句为Create PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和 @ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。

    二、存储过程的调用

    之前已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。存储过程建立好了,接下来就是要在应用程序里调用了,下面看一下在ASP程序里的调用。

    引用:

    Dim adoComm

    ’// 创建一个对象,我们用来调用存储过程

    Set adoComm = CreateObject("ADODB.Command")

    With adoComm

    ’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象

    .ActiveConnection = adoConn

    ’// 类型为存储过程,adCmdStoredProc = 4

    .CommandType = 4

    ’// 存储过程名称

    .CommandText = "upGetUserName"

    ’// 设置用户编号

    .Parameters.Item("@intUserId").Value = 1

    ’// 执行存储过程

    .Execute

    ’// 取得从存储过程返回的用户名称

    Response.Write "用户名:" & .Parameters.Item("@ostrUserName").Value

    End With

    ’// 释放对象

    Set adoComm = Nothing

    通过以上两步,已经可以创建和使用简单的存储过程了。下面来看一个稍微复杂点的存储过程,以进一步了解存储过程的应用。

    三、存储过程的实际应用

    用户登录在ASP项目中经常会使用到,但使用存储过程来做验证可能不多,那么做例子,写一个简单的用户登录验证的存储过程。

    引用:

    Create PROC upUserLogin

    @strLoginName NVARCHAR(20),

    @strLoginPwd NVARCHAR(20),

    @blnReturn BIT OUTPUT

    AS

    -- 定义一个临时用来保存密码的变量

    DECLARE @strPwd NVARCHAR(20)

    BEGIN

    -- 从表中查询当前用户的密码,赋值给 @strPwd 变量,下面要对他进行比较

    Select @strPwd=uLoginPwd FROM uUser Where uLoginName=@strLoginName

    IF @strLoginPwd = @strPwd

    BEGIN

    SET @blnReturn = 1

    -- 更新用户最后登录时间

    Update uUser SET uLastLogin=GETDATE() Where uLoginName=@strLoginName

    END

    ELSE

    SET @blnReturn = 0

    END

    用户登录的存储过程建立好了。注意,在一个区域内如果有多条语句时,必需使用BEGIN...END关键字。

    引用:

    Dim adoComm

    ’// 创建一个对象,我们用来调用存储过程

    Set adoComm = CreateObject("ADODB.Command")

    With adoComm

    ’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象

    .ActiveConnection = adoConn

    ’// 类型为存储过程,adCmdStoredProc = 4

    .CommandType = 4

    ’// 存储过程名称

    .CommandText = "upUserLogin"

    ’// 设置登录名称

    .Parameters.Item("@strLoginName").Value = "***"

    ’// 设置登录密码

    .Parameters.Item("@strLoginPwd").Value = "123456"

    ’// 执行存储过程

    .Execute

    ’// 判断是否登录成功

    If .Parameters.Item("@blnReturn").Value = 1 Then

    Response.Write "恭喜你,登录成功!"

    Else

    Response.Write "不是吧,好像错了哦。。。"

    End If

    End With

    ’// 释放对象

    Set adoComm = Nothing

    通过以上的步骤,简单用户登录验证过程也做完了,现在只要把它整合到程序中就可以实现简单的用户登录验证了,关于其他细节就由你自己来处理了。

    上面介绍的两个存储过程都是只返回一个值的,下面我们来看一个返回一个记录集的存储过程。

    引用:

    Create PROC upGetUserInfos

    @intUserGroup INT

    AS

    BEGIN

    -- 从数据库中抽取符合条件的数据

    Select uName,uGroup,uLastLogin FROM uUser Where uGroup=@intUserGroup

    -- 插入一列合计

    UNION

    Select ’合计人数:’,COUNT(uGroup),NULL FROM uUser Where uGroup=@intUserGroup

    END

    现在我们来看一下ASP程序的调用。

    引用:

    Dim adoComm

    Dim adoRt

    ’// 创建一个对象,我们用来调用存储过程

    Set adoComm = CreateObject("ADODB.Command")

    Set adoRs = CreateObject("ADODB.Recordset")

    With adoComm

    ’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象

    .ActiveConnection = adoConn

    ’// 类型为存储过程,adCmdStoredProc = 4

    .CommandType = 4

    ’// 存储过程名称

    .CommandText = "upGetUserInfos"

    ’// 设置用户组

    .Parameters.Item("@intUserGroup").Value = 1

    ’// 执行存储过程,和以上几个例子不同,这里使用RecordSet的Open方法

    adoRs.Open adoComm

    ’// 显示第一个值

    Response.write adoRs.Fields(0).Value

    End With

    ’// 释放对象

    Set adoRs = Nothing

    Set adoComm = Nothing

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • MYSQL存储过程查询返回结果处理方法

    千次阅读 2021-01-20 00:09:10
    1.3 创建存储过程 CREATE PROCEDURE test_proc_multi_select() BEGIN select * from testproc; select * from testproc where id=1; END; 二、JAVA相关代码 注意要导入MYSQL包 import java.sql.Connection; import ...

    一、MYSQL表创建语句

    1.1  创建表

    SET FOREIGN_KEY_CHECKS=0;

    DROP TABLE IF EXISTS `testproc`;

    CREATE TABLE `testproc` (

    `id` int(4) NOT NULL,

    `name` varchar(100) DEFAULT NULL,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    1.2  插入数据

    INSERT INTO `testproc` VALUES ('1', '第一条记录');

    INSERT INTO `testproc` VALUES ('2', 'efgh');

    INSERT INTO `testproc` VALUES ('3', 'ijklmn');

    INSERT INTO `testproc` VALUES ('4', 'zxvb');

    INSERT INTO `testproc` VALUES ('5', 'uiop');

    INSERT INTO `testproc` VALUES ('6', '222');

    INSERT INTO `testproc` VALUES ('7', '8888');

    INSERT INTO `testproc` VALUES ('9', '第9条记录');

    INSERT INTO `testproc` VALUES ('10', '第10条记录');

    INSERT INTO `testproc` VALUES ('11', '第11条记录');

    INSERT INTO `testproc` VALUES ('12', '第12条记录');

    1.3  创建存储过程

    CREATE PROCEDURE test_proc_multi_select()

    BEGIN

    select * from testproc;

    select * from testproc where id=1;

    END;

    二、JAVA相关代码

    注意要导入MYSQL包

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import com.mysql.jdbc.CallableStatement;

    public class Test1 {

    public static final String DBDRIVER = "com.mysql.jdbc.Driver";

    public static final String DBURL = "jdbc:mysql://127.0.0.1:3306/test1";

    public static final String DBUSER = "root";

    public static final String DBPASS = "123456";

    public static void main(String[] args) {

    Connection con = null;

    CallableStatement cs;

    try {

    Class.forName(DBDRIVER);

    con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);

    String sql = "{call test_proc_multi_select()}";

    cs = (CallableStatement) con.prepareCall(sql);

    boolean hadResults = cs.execute();

    int i = 0;

    while (hadResults) {

    System.out.println("result No:----" + (++i));

    ResultSet rs = cs.getResultSet();

    while (rs != null && rs.next()) {

    int id1 = rs.getInt(1);

    String name1 = rs.getString(2);

    System.out.println(id1 + ":" + name1);

    }

    hadResults = cs.getMoreResults(); // 检查是否存在更多结果集

    }

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (SQLException e) {

    e.printStackTrace();

    } finally {

    try {

    con.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    }

    }

    b725a3a7d1d691b8916035cd81a6d6ad.png

    展开全文
  • 展开全部如果对select 返回的结果行都需要处理,使用游标。如果只想取得返32313133353236313431303231363533e58685e5aeb931333361313365回多行中的一行,使用limit。下面的代码可以作为参考:CREATEPROCEDUREcurdemo...

    展开全部

    如果对select 返回的结果行都需要处理,使用游标。

    如果只想取得返32313133353236313431303231363533e58685e5aeb931333361313365回多行中的一行,使用limit。

    下面的代码可以作为参考:CREATE PROCEDURE curdemo()

    BEGIN

    DECLARE done INT DEFAULT 0;

    DECLARE a CHAR(16);

    DECLARE b,c INT;

    DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;

    DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;

    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

    OPEN cur1;

    OPEN cur2;

    REPEAT

    FETCH cur1 INTO a, b;

    FETCH cur2 INTO c;

    IF NOT done THEN

    IF b 

    INSERT INTO test.t3 VALUES (a,b);

    ELSE

    INSERT INTO test.t3 VALUES (a,c);

    END IF;

    END IF;

    UNTIL done END REPEAT;

    CLOSE cur1;

    CLOSE cur2;

    END

    展开全文
  • 存储mysql数据库的详细过程发布时间:2020-05-13 15:19:39来源:亿速云阅读:198...存储过程简介存储过程可以简单理解为一条或者多条sql语句的集合,存储过程用来实现将一组关于表的操作的sql语句当作一个整体来执行...
  • MySQL存储过程-循环遍历查询到的结果集1、创建存储过程根据MySQL的语法创建存储过程,要注意的是如果循环遍历查询到的结果集,取出结果集中的数据做操作。CREATE DEFINER=`root`@`%` PROCEDURE `alter_view_counts`...
  • 文章目录etcdV2数据存储机制etcdV3数据模型数据结构etcdV3MVCC实现 etcdV2数据存储机制 etcd v2 是一个纯内存数据库,整个数据库在内存中是一个简单的树结构.。写操作先通过 Raft 复制日志文件,复制成功后将数据写...
  • 存储过程和函数的操作

    千次阅读 2021-11-22 20:40:24
    在MySQL软件中关于数据的操作,包括插入数据记录操作(CREATE,INSERT)、查询数据记录操作(SELECT),更新数据记录棟作(UPDATE)和删除数据记录操作(DELETE)。第9章已经详细介绍了关于数据的操作,本章将详细介绍...
  • 创建无参的存储过程这节我们主要来学习Mysql数据库的存储过程,我们知道我们要经常的对数据表进行增删改查的操作,或者叫CURD,实际上,当我们成功的输入SQL命令时,mysql引擎会对输入的命令进行语法分析,来检查...
  • mysql存储过程 if 语句

    2021-01-27 21:36:04
    MySql的存储过程存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在...
  • 存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可。 1. 存储过程概述 1.1 理解 含义:存储过程的英文是 Stored Procedure 。...
  • oracle数据库中查看系统存储过程的方法复制代码 代码如下:select line,text from dba_source where name='PRO_E_F_ORDER_STAT';select object_name,object_type from dba_objects where object_type='PROCEDURE';...
  • 实验6:存储过程与函数的创建管理实验一、实验目的:理解存储过程和函数的概念。掌握创建存储过程和函数的方法。掌握执行存储过程和函数的方法。掌握游标的定义、使用方法。二、验证性实验1.某超市的食品管理的...
  • hashmap存储数据

    千次阅读 2020-12-31 07:56:01
    存储元素采用的是hash表存储数据,每存储一个对象的时候,都会调用其hashCode()方法,算出其hash值,如果相同,则认为是相同的数据,直接不存储,如果hash值不同,则再调用其equals方法进行比较,如果返回true,则...
  • springboot调用存储过程

    千次阅读 2021-01-21 17:49:51
    * 存储过程更新 * * @param map * @return */ Map<String,String> callProceUpdate(Map<String, String> map); } 2.mybatis sql文件 <?xml version="1.0" encoding="UTF-8" ?> <!.
  • PostgreSQL存储过程(五):函数返回值

    千次阅读 2021-04-11 12:15:49
    PostgreSQL函数提供了OUT关键字和RETURNS两种语法来实现返回值的定义,其中RETURNS关键字需要在函数体中使用RETURN关键字指明返回的变量,示例脚本如下: 1. 通过OUT关键字指定返回值 ------------------- CREATE...
  • 存储过程中拼接SQL语句 很时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANS ......
  • SQL存储过程存储函数

    千次阅读 2021-11-25 11:03:15
    存储过程和函数: 存储过程和函数是事先经过编译并存储在数据库中的一SQL语句的集合 存储过程和函数的好处: 存储过程和函数可以重复使用,减轻开发人员的工作量。类似于java中方法可以次调用 减少网络流量,...
  • 问题一(最多可以存储多少条数据)问题二 ,存储到最大之后再进行add会出现什么情况为什么(why?)ArrayList中add运行的代码块回过头来分析为什么数组越界业务中真的碰到了怎么解决链表形式存储(LinkedList)map分级...
  • PostgreSQL的存储过程及基本使用

    千次阅读 2021-02-24 16:41:54
    PostgreSQL的存储过程及基本使用 一、存储过程的结构二、变量使用... 四、查询并返回多条记录五、其它 一、存储过程的结构 一个求长方形面积的存储过程。(当然,这个存储过程在数据库中并没有什么实用意义,这...
  • 时候我们写的存储过程或多或少有些问题,数据也不正确,不希望直接提交 一旦提交了,可能这测试数据就被使用了,我们需要重新创造测试数据 因此,如何通过sql调用存储过程,然后不提交,接着执行我们的查询、...
  • mysql怎么一次执行多条SQL语句?

    千次阅读 2021-01-18 20:29:13
    上面返回空记录。单独将$sql里面的内容放在phpmyadmin中执行正确,所以SQL语句应该是正确,估计连接方式那城出了问题请问如何写才能显示出来,谢谢!回复讨论(解决方案)我的本意是用php读mysql时,能像asp读mssql...
  • 我需要关联张表查询,每次查询时间大概4s左右,查询出来后还需要组装数据,然后才返回接口。返回格式是json。这样的话接口返回会比较慢。想过提前将数据放redis集群,但是后来否定了,因为用户量大概是500万,每...
  • mysql存储过程

    2021-12-02 09:17:40
    MySQL储存过程
  • 1、处理存储过程返回单个结果集的范例:/*****************************************************************************/作者:何志强[hhzqq@21cn.com]日期:2000-08-042000-08-16版本:1.1功能:JSP数据库操作...
  • 视图 1. 常见的数据库对象 对象 描述 ...表是存储数据的逻辑单元,以行和列的...一个或者数据表里的数据的逻辑显示,视图并不存储数据 索引(INDEX) 用于提高查询性能,相当于书的目录 存储过程(PROCEDURE)
  • 用户画像 | 标签数据存储之Elasticsearch真实应用

    千次阅读 多人点赞 2021-02-24 00:17:35
    本文已收录github:https://github.com/BigDataScholar/TheKingOfBigData,里面有...上一篇文章已经为大家介绍了 HBase 在用户画像的标签数据存储中的具体应用场景,本篇我们来谈谈 Elasticsearch 的使用! Elastics.
  • 本文已收录github:...上一篇文章已经为大家介绍了 MySQL 在用户画像的标签数据存储中的具体应用场景,本篇我们来谈谈 HBase 的使用! 原著作者:赵宏田 来源:《用户.
  • 是否可以从mysql函数返回多个值?

    千次阅读 2021-01-19 01:36:17
    2返回字符串. 3 Splits将字符串返回值.我认为它不优雅,我确信这有局限性,但它适用于简单的情况还有必要创建分裂函数,因为Mysql没有这个函数:首先编辑你的功能.CREATE FUNCTION yourFunctionWith2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 612,898
精华内容 245,159
关键字:

存储过程返回多条数据