Mysql模式ODC直接修改存储过程功能

目前ODC界面上的存储过程修改功能不能够直接使用,不清楚为什么不开发使用(企业版)。
按照mysql的语法:

drop procedure if exists ceshi_year;
DELIMITER $$

create procedure ceshi_year(IN tj_year int(45)) begin
declare p_year int default 2024;

IF tj_year != 2024 THEN
	set p_year = tj_year;
END IF;
select p_year;

end$$

DELIMITER ;

这样既可完成存储过程的先删除后创建,若是不能够修改,希望能增加重建功能,这样就不需要每次改动都讲存储过程复制到新的窗口,倍添时间,望能采纳。

这个需求已经在排期了 耐心等待 到时候发版了 会有说明

1 个赞

想请问一下,关于Mysql在ODC上的调试是否有相应的需求排期?

你的意思是就像 navicat调试mysql的存储过程那样么?

navicat没试过,应该是像Sqlserver Management那样做调试。

目前mysql模式是还不支持在存储过程以外定义变量运行,这样也导致了在在存储过程需要调试的时候都要拉出来,然后将变量全局替换掉再运行查看结果。(Oracle模式下支持的匿名块功能)

目前系统上是有300+的存储过程在运行,所以对存储过程使用体验这块比较关注。

这个估计不行 obmysql内核本身不支持像oracle那样 调试存储过程的 其实mysql也是不支持的

能不能调试问题不大,如果能做到在存储过程外定义变量执行对问题的查找就有很大的帮助。

你举个例子 我看看是什么样的一种方式

直接按脚本(框选)执行下列全部代码:

declare p_year int default 2024;

IF tj_year != 2024 THEN
	set p_year = tj_year;
END IF;
select p_year;

因为开发的存储过程有可能是几千行的代码,目前两种做法就是:

  1. 全局替换将变量名替换为对应的数值
  2. 重新创建存储过程,再执行存储过程

是不是可以用自定义变量来达到你想要的效果,比如:

CREATE PROCEDURE debug_example_procedure()
BEGIN
    DECLARE v_debug INT DEFAULT 0;
    
    SELECT @count INTO v_debug;
    
    IF v_debug = 1 THEN
        -- 执行一些调试动作,例如输出变量值等
        SELECT 'Debugging info: count value is 1';
    END IF;
    
    -- 存储过程的其他逻辑
END;
SET @count = 0;

CALL debug_example_procedure();

这样只需要在第一次替换一次,将 PL 中的原始变量替换为 @count,调试的时候,只需要改 SET @count=xxx 一处地方,不需要全量改 PL,也不需要重建 PL。

1 个赞

非常感谢大佬推荐的写法。

  1. 这种写法,试了一下,应该是有一定的效果。但是对于上千行的存储过程还要再加入这个判断语句,代码量就会更加多了。
  2. 在开发过程中会对存储过程进行修改,还是无法避免需要先删除再创建的形式才能执行存储过程吧(现有知识的见解)
  3. 如果能有像Oracle模式的匿名块中定义变量执行的方式能够更好地加快调试的速度。