`
newslxw
  • 浏览: 208383 次
  • 性别: 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内获取返回值进行了详细的分析介绍,需要的朋友参考下

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

    delphi如何调用sql存储过程,并获取结果 adostoredproc1.Close; adostoredproc1.ProcedureName:='sp_thchl'; adostoredproc1.Parameters.Clear; adostoredproc1.Parameters.CreateParameter('out',ftInteger,...

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

    本文实例讲述了Python调用MySQL存储过程并获得返回值的方法。分享给大家供大家参考。具体实现方法如下: try: conn = MySQLdb.connect ( host = 'localhost', user = 'root', passwd = 'pass', db = 'prod', ...

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

    本文实例讲述了VB.NET调用MySQL存储过程并获得返回值的方法。分享给大家供大家参考。具体实现方法如下: Dim myConnectionString As String = Database= & myDatabase & _ ;Data Source= & myHost & _ ;User Id= ...

    C#获取存储过程返回值和输出参数值的方法

    代码如下://存储过程//Create PROCEDURE MYSQL// @a int,// @b int//AS// return @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[“LocalSqlServer”].ToString())...

    mysql存储过程原理与用法详解

    本文实例讲述了mysql存储过程原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018-04-17 什么...

    C#中调用MySQL存储过程的方法

    本文实例讲述了C#中调用MySQL存储过程的方法。分享给大家供大家参考。具体如下: 这段代码演示在 C# 程序中调用 MySQL 的存储过程,没有返回值,没有参数传递。 MySqlConnection myConnection; myConnection = new ...

    MySQL存储过程概念、原理与常见用法详解

    本文实例讲述了MySQL存储过程概念、原理与常见用法。分享给大家供大家参考,具体如下: 1、存储过程的概念 在一些语言中,如pascal,有一个概念叫“过程”procedure,和“函数”function,在php中,没有过程,只有...

    MySQL存储过程和函数使用总结

     存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。...

    PHP调用MySQL存储过程并返回值的方法

    本文实例讲述了php中调用执行mysql存储过程然后返回由存储过程返回的值,分享给大家供大家参考。具体分析如下: 调用存储过程的方法. a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,...

    MySQL 声明变量及存储过程分析

    在函数和储存过程中使用的变量declear declear a int unsigned default 1; 这种变量需要设置变量类型 而且只存在在 begin..end 这段之内 select .. into.. 直接将表内内容赋值到指定变量当中 select name,bid ...

    MySQL中文参考手册.chm

    1.2 关于本手册 1.2.1 本手册中使用的约定 1.3 MySQL的历史 1.4 MySQL的主要特征 1.5 MySQL稳定性? 1.6 顺应2000年 1.7 SQL一般信息和教程 1.8 有用的MySQL相关链接 ...

    MySQL存储过程及常用函数代码解析

    mysql存储过程的概念: 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段。 mysql函数的概念: 函数是完成特定功能的SQL语句,函数分为内置函数和自定义函数(user-defined function UDF) ...

    MySQL中文参考手册

    + 1.2.1 本手册中使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o 1.8 有用的MySQL相关链接 * 2 MySQL 邮件列表及如何提问或报告错误...

    mysql存储过程快速了解

    整篇文章为个人学习心得,之后会持续发表mysql高级进阶,javaweb框架等知识点文章,制作不易,加个关注 存储过程 优点: 提高开发效率,提高应用程序的性能,简化程序开发人员的操作,减少应用程序和是数据库服务器...

    MYSQL

    1.2 关于本手册 1.2.1 本手册中使用的约定 1.3 MySQL的历史 1.4 MySQL的主要特征 1.5 MySQL稳定性? 1.6 顺应2000年 1.7 SQL一般信息和教程 1.8 有用的MySQL相关链接 2 MySQL ...

    mysql存储过程之引发存储过程中的错误条件(SIGNAL和RESIGNAL语句)实例分析

    在mysql中,我们可以使用SIGNAL和RESIGNAL语句来引发存储过程中的错误条件。 先来看,SIGNAL语句。我们通常使用SIGNAL语句在存储的程序(例如存储过程,存储函数,触发器或事件)中向调用者返回错误或警告条件。 ...

    MySql的存储过程学习小结 附pdf文档下载

    存储过程是一种存储在数据库库中的程序(就像正规语言里的子程序一样),准确的来说,MySql支持的“routine(例程)”有两种:一是我们说的存储过程,二是在其它sql语句中可以返回值的函数(使用起来和mysql预装载的...

    MySQL系列—-创建存储函数、游标的使用

    MySQL系列—-创建存储函数、游标的使用创建存储函数输入任意三个数,结果输出它们的最小值调用函数使用游标使用游标从表中查询信息从sc表中查询成绩高于80分的学生信息有帮助的别忘了点个赞再走哦!! 本期是MySQL...

Global site tag (gtag.js) - Google Analytics