Mysql 递归存储过程...达到限制 0...无法更改 max_sp_recursion_depth 变量

2023-12-02

更新:好的,我能够调试这个并发现通过这样做select @@max_sp_recursion_depth我可以看到该变量设置为 15,但是,当我使用以下命令运行回调时CALL single_limb_portfolio_list(xaccount_id, xparent_portfolio_id);我收到错误消息,指出已达到递归限制 0,但它从未迭代过一次”


当我运行下面的递归存储过程时,我不断收到“超出递归限制 0”的消息,即使我将其设置为SET max_sp_recursion_depth = 15 ;

我是否将此变量设置在错误的位置?它的表现就像它永远不会被设置并且始终保持为零?

在此先感谢您的帮助。

递归存储过程:

CREATE DEFINER=`aaron`@`localhost` PROCEDURE `single_limb_portfolio_list`(xaccount_id INT, IN portf_id_in INT, OUT str_portf_list VARCHAR(455))
BEGIN
    DECLARE xportfolio_ID INT DEFAULT NULL ;
    DECLARE xp_name INT DEFAULT NULL ;
    DECLARE xparent_portfolio_id INT DEFAULT NULL ;
    DECLARE xstr_list VARCHAR(455) ;

  SET max_sp_recursion_depth = 15 ;

    SELECT portfolio_id, p_name, parent_portfolio_id
    FROM portfolio
    WHERE account_id = xaccount_id
    AND archived = 0
    AND portfolio_id = portf_id_in
    INTO xportfolio_ID, xp_name, xparent_portfolio_id;

   IF xportfolio_ID IS NULL /* We have reached the top of the tree and there are no more parents for the portfolio list */
    THEN
    SET str_portf_list = xstr_list; #Set the full tree list to the variable that will be inserted as a row into the temp table previously created
   ELSE
    CALL single_limb_portfolio_list(xaccount_id, xparent_portfolio_id); #call the sproc with the next portfolio id to get the next parent id
    SET xstr_list = concat(xp_name,"->",xstr_list);   #Add the portfolio name to the overall portfolio list. Output like: "California -> Los Angelas"
   END IF;

END

这是一个非递归解决方案,您可以根据您的模型进行调整(http://pastie.org/1259300)

drop table if exists product;

create table product
(
prod_id smallint unsigned not null auto_increment primary key,
name varchar(255) not null,
parent_id smallint unsigned null,
key (parent_id)
)engine = innodb;


insert into product (name, parent_id) values
('Products',null), 
   ('Systems & Bundles',1), 
   ('Components',1), 
      ('Processors',3), 
      ('Motherboards',3), 
        ('AMD',5), 
        ('Intel',5), 
           ('Intel LGA1366',7);


delimiter ;

drop procedure if exists product_hier;

delimiter #

create procedure product_hier
(
in p_prod_id smallint unsigned
)
begin

declare v_done tinyint unsigned default 0;
declare v_depth smallint unsigned default 0;

create temporary table hier(
 parent_id smallint unsigned, 
 prod_id smallint unsigned, 
 depth smallint unsigned default 0
)engine = memory;

insert into hier select parent_id, prod_id, v_depth from product where prod_id = p_prod_id;

/* http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html */

create temporary table tmp engine=memory select * from hier;

while not v_done do

    if exists( select 1 from product p inner join hier on p.parent_id = hier.prod_id and hier.depth = v_depth) then

        insert into hier 
            select p.parent_id, p.prod_id,  v_depth + 1 from product p 
            inner join tmp on p.parent_id = tmp.prod_id and tmp.depth = v_depth;

        set v_depth = v_depth + 1;          

        truncate table tmp;
        insert into tmp select * from hier where depth = v_depth;

    else
        set v_done = 1;
    end if;

end while;

select 
 p.prod_id,
 p.name as prod_name,
 b.prod_id as parent_prod_id,
 b.name as parent_prod_name,
 hier.depth
from 
 hier
inner join product p on hier.prod_id = p.prod_id
inner join product b on hier.parent_id = b.prod_id
order by
 hier.depth, hier.prod_id;

drop temporary table if exists hier;
drop temporary table if exists tmp;

end #

delimiter ;


call product_hier(3);

call product_hier(5);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql 递归存储过程...达到限制 0...无法更改 max_sp_recursion_depth 变量 的相关文章

  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 数据库字段中的逗号分隔值

    我有一个产品表 该表中的每一行对应一个产品 并由唯一的 ID 标识 现在 每个产品都可以有多个与该产品关联的 代码 例如 Id Code 0001 IN ON ME OH 0002 ON VI AC ZO 0003 QA PS OO ME
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • 删除数据库中的行后如何重新排序ID

    我正在使用 C 来制作具有 sql 数据库的程序 在数据库中我有一个名为Workers 它有一个自动增量和主键ID column 当我删除一条记录时 ID 之间会出现间隙 删除记录后如何重新排序 ID UPDATE 我要做的就是找到记录后将
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 循环预定义值

    有没有办法在 oracle 中执行 for every 如下所示 begin for VAR in 1 2 5 loop dbms output put line The value VAR end loop end 我知道你可以这样做 b
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 如何通过SQL查询检查是否有JSON函数?

    有SQL 2016 中的 JSON 函数 https learn microsoft com en us sql t sql functions json functions transact sql例如 JSON VALUE JSON Q
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • 为什么 ARC 禁止调用未声明的方法?

    当使用手动内存管理时 我们可以编写对类中未声明的方法的调用 在这种情况下 我们在编译过程中得到的只是警告 这是维基百科对 Objective C 最独特的功能之一的描述 面向对象编程的 Objective C 模型基于向对象实例传递消息 在
  • Android 多重通知避免更新时闪烁

    我正在开发这样的应用程序 它使用多个通知 其中每个通知都有播放暂停图标 用于执行音乐播放器的播放 暂停 但更新通知时会出现奇怪的行为 这些通知在更新时会不断闪烁 我的代码如下 SuppressLint NewApi public void
  • 默认情况下,Windows 内存映射文件内容是否始终归零?

    我凭经验确定 在我的系统上 创建为特定大小的内存映射文件在默认情况下总是完全清零 例如 使用调用 HANDLE hMM CreateFileMapping h NULL PAGE READWRITE 0 0x01400000 20MB NU
  • 如何读取多个XML节点? (创新设置)

    这是我想要读取的 XML 我有同名的节点 我想访问节点以在组合框中显示国家 地区并在列表框中显示货币 XML 如下所示
  • 配置面板的垂直菜单

    我想创建像这个例子这样的配置面板 问题是我不知道如何在左侧创建垂直菜单 你能举一些类似菜单的例子吗 package verticalmenubar import javafx application Application import j
  • Flash 还是 Flex 更适合构建用户交互式订购“向导”网站?

    我想看看这些是否 构建了一个 flash 站点 支持用户定制的订购流程 是使用常规 flash 还是 Flex 完成的 Site 1 Site 2 Site 3 Site 4 所有这些都 引导用户 完成定制的订购流程并捕获他们的所有选择并向
  • 如何在 Bootstrap 中更改 btn 颜色

    有没有办法改变一切 btnBootstrap 中的属性 我已经尝试过以下内容 但有时它仍然显示默认的蓝色 例如单击并移除鼠标等后 我怎样才能完全改变整个主题 btn primary btn primary hover btn primary
  • Python MySQLdb 未导入

    我已经使用安装了mysql服务器 sudo apt get install mysql server 然后我使用安装了 python mysqldb sudo apt get install python mysqldb 但是当我在 pyt
  • 在 CSS 文件中访问 Ruby 中的区域设置

    所以我在一个项目中使用 CSS JS 和 Ruby 现在我在 ruby 中设置了位置等 但我想在我的 css 文件上访问它们 这是为了自定义特定区域设置的视图 我在我的控制器中完成了以下操作 before filter set locale
  • 命名空间更改后 DataContractSerializer 兼容性

    我有一个类需要序列化 namespace serializedobject DataContract public class Class1 string string1 string string2 EntityA entity Data
  • 用于匹配域和子域的正则表达式(Java 中)

    我需要验证给定的 URL 是否与我的域名掩码匹配 示例 我只想允许满足此 伪掩码 的域 https domain com http domain com 所以接下来的域是可以的 http my domain com something bl
  • 在数组中排序

    对数组进行排序时 例如 A 5 1 4 5 3 2 输出必须按升序排列为 1 2 3 4 5 使用冒泡排序的概念 我的输出是0 1 2 3 4 我的代码有什么问题 int A 5 1 5 3 2 4 for int i 0 i lt 5 i
  • 打印 MySQLdb 运行的实际查询?

    我正在寻找一种在执行查询时调试查询的方法 我想知道是否有一种方法可以让 MySQLdb 在完成插入参数等操作后打印出它运行的实际查询 从文档来看 似乎应该有一个 Cursor info 调用来提供有关上次查询运行的信息 但这在我的版本 1
  • 验证预填充的 jQuery 表单(第一个字段清除时无效,ASP.NET 且不显眼)

    我有一个可以填写 保存 加载和重新编辑的表格 当它被加载并重新编辑时 它可能开始有效 当一个字段在加载时有效时 我希望它在违反规则编辑时立即无效 简而言之 这就是我的问题 我怀疑这是由我找不到的某些配置选项支持的 目前 只有在以下情况下它才
  • 来自同一来源的多个 NFT

    一般性的 NFT 问题 但不要攻击我 我真的试图找到答案 NFT 可以从同一张图像或该图像的副本创建吗 以我创建的这个 NFT 狮子猫为例 https rarible com token 0x60f80121c31a0d46b5279700
  • 在一次计算中求和单选按钮值和复选框值 - javascript 和 html

    我正在尝试计算单选按钮和复选框的值 我让单选按钮按要求工作 但无法为复选框提供正确的脚本 我希望复选框有一个小计 工作正常 然后将该小计添加到单选按钮的计算中 以下是我到目前为止所拥有的 任何建议 将不胜感激 谢谢
  • 如何从 Android 上的应用程序启动 URL?

    如何编写我的 Android 应用程序以启动 Web 浏览器来显示给定的 URL 我不想将网络浏览器组件嵌入到我的应用程序中 而是希望启动 Android 网络浏览器来显示 URL Thanks 只需使用具有正确操作和数据的 Intent
  • PHP if/else 语句

    如何在 PHP 中编写以下语句 如果 body ID home 则插入一些 html 例如 h1 I am home h1 否则 插入此 html p I m not home p 使用本机 PHP 模板执行此操作 h1 I am home
  • 如何捕获 CMDEXEC SQL Server 作业的退出代码?

    以下 SQL Server 作业始终退出并返回代码 0 表示成功 而实际上它没有执行其作业 即它不会删除 test txt 如何捕获实际的退出代码 例如 ERRORLEVEL 或 权限被拒绝 之类的消息 或指示 msdb dbo sp ad
  • Mysql 递归存储过程...达到限制 0...无法更改 max_sp_recursion_depth 变量

    更新 好的 我能够调试这个并发现通过这样做select max sp recursion depth我可以看到该变量设置为 15 但是 当我使用以下命令运行回调时CALL single limb portfolio list xaccoun