`
newslxw
  • 浏览: 212788 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql存储过程中使用动态SQL,并且返回值

阅读更多

例子
set @sql='xxx';
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
select @curd1;


1、在prepare stmt from 命令后面的变量不能是自定义变量,必须是用户变量或者全局变量
2、存储动态SQL的值的变量也不能是自定义变量,必须是用户变量或者全局变量
例子:
set @sql='select cur,cur2 into @curd1,curd2 from mytable'
prepare stmt from @sql;

3、存储过程非线程安全的,由于在动态SQL中使用用户变量,在多线程环境下,这个变量会被多个线程共享,因此必须加锁,方法如下:

declare lockstatus int;
if get_lock('锁名称',60) then
   .....
   select release_lock('锁名称') into lockstatus;

end if;

get_lock中第一个参数是锁得名称,自定义的,当其他线程也请求这个锁时就会被锁定。
第二个参数是等待时间,即60秒内获取锁,否则失败。

release_lock只接受 锁名称

release_lock不能单独使用,如
release_lock('lock1');
会编译不同步
必须在语句中使用,如select release_lock('lock1') into lockstatus;
比较怪异。
估计get_lock也是,但没试验。


4、JAVA程序调用方法(hibernate)
   String sqlname = "call 存储过程名称(?..参数列表)";
  Query query = null;
  query = session.createSQLQuery(sqlname);
  query.setParameter(1,..);
  ...
  List list = query.list();
  list.get(0); //这个就是存储过程中的select @curd1; 的查询结果
分享到:
评论
2 楼 vrbvillor 2013-05-17  
我的QQ是245614005。
如果您可以帮我的话,请发邮件或联系我QQ好吗,谢谢。

我的最基本问题就是不知道怎么使用这个格式

create function funname(tablename varchar(5))
returns varchar(255)
begin
    declare ids varchar(255) default '';
    set ids=(select group_concat(id SEPARATOR ',') from tablename);
end
$$


就是想,可以随便地更换表名,来使同一个函数,作用在不同的表上
麻烦您帮我想想解决方案,谢谢,亲!
1 楼 vrbvillor 2013-05-17  
  大侠,请教一个问题。

我想在mysql的function里边,from后边的表名用变量,应该怎么用啊?
我直接用带参数进去的,提示数据库不存在此表tablename

代码如下:
create function getNodePath(tablename varchar(5),nodeid bigint)
returns varchar(255)
begin
    declare pathids varchar(255) default nodeid;
    declare parent bigint default 1;
    declare curnode bigint default nodeid;
    LOOP_LABLE:loop
        set parent=(select par from tablename where id=curnode);
        if(parent-0>0)then
            set pathids=concat(parent,',',pathids);
            set curnode=parent;
        else
            leave LOOP_LABLE;
        end if;
    end loop;
    return pathids;
end
$$

但我把参数里边的tablename去掉,函数里边的tablename换成特定的我要的表名就可以用了。请问,怎么才能把它换成变量?因为有好几个表要用这个函数。

相关推荐

    mysql存储过程 在动态SQL内获取返回值的方法详解

    MySQL存储过程是数据库中用于执行一组特定操作的预编译的SQL语句集合。它们允许开发人员封装复杂的逻辑,提高代码复用性和数据库操作效率。在动态SQL中获取返回值是存储过程的一个重要功能,尤其在处理不确定的数据...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    Java实现调用MySQL存储过程详解

    总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。

    MySQL存储过程编程.pdf

    MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的编程技术。存储过程是一种可以在数据库中存储和执行的程序单元,它可以实现复杂的业务逻辑和数据处理操作。 在 MySQL 5.0 中,存储过程的...

    delphi如何调用sql存储过程,并获取结果

    在Delphi中调用SQL存储过程并获取结果是数据库编程中的一个重要环节。下面将通过给定的代码示例,详细解析Delphi如何调用SQL存储过程,并获取执行结果。 ### Delphi调用SQL存储过程的基本步骤 #### 1. 准备工作 ...

    Python简单调用MySQL存储过程并获得返回值的方法

    希望本文所述能帮助你理解如何在Python中调用MySQL存储过程并获取返回值。如果你对MySQL存储过程的创建、参数传递、错误处理等方面有更深入的需求,可以参考相关教程或文档,进一步学习这些高级特性。

    mysql存储过程之返回多个值的方法示例

    MySQL存储过程是数据库中用于执行复杂操作的一组预编译的SQL语句,它们可以接收输入参数、输出结果以及在内部处理数据。在本示例中,我们将探讨如何通过存储过程返回多个值,并且结合PHP进行调用。 首先,我们要...

    关于有返回值的存储过程

    在数据库管理中,存储过程(Stored Procedure)是一种预编译的SQL代码集合,它封装了特定的功能,并且可以在需要时通过调用执行。存储过程在IT领域中扮演着重要的角色,尤其是在大型企业级应用和数据处理中。标题...

    VB.NET调用MySQL存储过程并获得返回值的方法

    在VB.NET中调用MySQL存储过程并获取返回值是一个常见的任务,这有助于提高数据库操作的效率和代码的可维护性。下面将详细讲解这个过程,以及涉及到的相关知识点。 首先,要建立与MySQL数据库的连接。这通常通过创建...

    mysql 存储过程 实战

    ### MySQL存储过程实战知识点 #### 一、存储过程概述 MySQL 存储过程是一种预编译的 SQL 脚本,它可以包含复杂的逻辑控制结构、循环等操作,并且可以接受参数,执行完后还可以返回结果。存储过程可以提高数据处理...

    MySQL存储过程基础教程.pdf

    MySQL支持在存储过程中使用循环结构,如`WHILE`、`REPEAT`和`LOOP`,这些结构可以用于执行重复的查询或操作。 #### 9. 错误处理 在MySQL中,可以使用`DECLARE ... HANDLER`语句来处理存储过程中可能出现的错误或...

    MySQL存储过程.pdf

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一组SQL语句并封装成一个可重复使用的对象。这种技术在处理复杂的业务逻辑、提高数据操作效率以及减少网络传输时非常有用。本文件“MySQL存储...

    Java调用MySQL存储过程并获得返回值的方法

    在Java编程中,调用MySQL存储过程并获取返回值是一项常见的任务,这有助于优化数据库操作,提高代码的可维护性和性能。以下是如何使用Java来执行这个操作的详细步骤和相关知识点: 1. **连接数据库**: 在Java中,...

    MySQL存储过程经典教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一组SQL语句并封装成一个可重复使用的对象。这个经典教程旨在深入探讨存储过程的各个方面,帮助读者掌握这一强大的数据库编程工具。 1. **存储...

    MySQL存储过程 参考查阅资料

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许程序员或数据库管理员预编译一系列SQL语句,形成一个可重复执行的单元,以提高数据库操作的效率和便捷性。在这个“MySQL存储过程参考查阅资料”中,你可以...

    精通MySQL存储过程和函数

    本手册适用于对MySQL存储过程和函数感兴趣的开发者和技术人员,特别是那些希望深入了解并掌握如何在实际项目中高效利用这些功能的专业人士。手册中的所有示例和操作均基于CentOS 6.2 64位系统和MySQL 5.6版本进行。 ...

    mysql存储过程_游标_项目练习

    MySQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集,它可以被保存和重复使用,提高了数据库的效率和可维护性。在本项目实践中,我们将深入学习和运用MySQL的存储过程,同时结合游标这一重要工具进行...

    Mysql存储过程和函数

    本文将详细介绍MySQL存储过程与函数的相关概念、创建方法以及使用技巧。 #### 二、存储过程与函数的区别 - **存储过程**(Stored Procedure):是一系列SQL语句的集合,它可以接受输入参数并返回多个结果集和...

    mysql 存储过程应用(代码详解)

    ### MySQL存储过程应用详解 #### 一、存储过程概述 在MySQL中,存储过程是一种预编译好的SQL脚本,可以包含复杂的逻辑控制语句、循环结构以及事务处理等功能。通过存储过程,开发者可以在数据库服务器端执行一系列...

Global site tag (gtag.js) - Google Analytics