【问题标题】:Why is mySQL procedure returning null when called from within procedure, but not when called on it's own为什么从过程中调用时mySQL过程返回null,但在自己调用时不返回
【发布时间】:2018-01-10 07:19:42
【问题描述】:

我有一个 mySQL 过程,它正在调用另一个过程来构建连接的 TEXT 字段。调用外部过程时,我的插入语句给出了“脚本不能为空”的错误。当我自己调用内部过程时,它会返回正确的值。是什么赋予了?这可能很简单,但我没有看到它。

外部程序

DELIMITER $$

USE `automation`$$

DROP PROCEDURE IF EXISTS `pd_build_script`$$

CREATE DEFINER=`user`@`%` PROCEDURE `pd_build_script`(
    IN autom_type INT(3),
    IN auto_font VARCHAR(30),
    IN auto_design VARCHAR(10),
    IN auto_d_only TINYINT(1),
    IN auto_job VARCHAR(255),
    IN auto_template VARCHAR(75)
)
BEGIN
    DECLARE font VARCHAR(30);
    DECLARE design_script TEXT;

    SELECT indesign_name INTO font FROM automation.`indesign_font` WHERE auto_type = autom_type AND web_name = auto_font;
    IF (auto_design = "PD00") THEN
        CALL pd00(font, @out_script);
    ELSEIF (auto_design = "PD1" OR auto_design = "PD73" OR auto_design = "PD88" 
        OR auto_design = "PD97") THEN 
        CALL single_letter_art(font, auto_design, auto_d_only, @out_script);
    ELSEIF (auto_design = "PD2") THEN
        CALL pd2(font, auto_d_only, @out_script);
    ELSEIF (auto_design = "PD3") THEN
        CALL pd3(font, auto_d_only, @out_script);
    ELSEIF (auto_design = "PD28") THEN
        CALL pd28(font, auto_d_only, @out_script);
    ELSE
        CALL pd_general(font, auto_design, auto_d_only, @out_script);
    END IF;   

    SET design_script = CONCAT("some text", @out_script, "more text");
    INSERT INTO automation.`job_script` (job_id, script, batch) 
    VALUE (auto_job, @out_script, CONCAT('batch text', auto_job));
END$$

DELIMITER ;

内部程序

DELIMITER $$

USE `automation`$$

DROP PROCEDURE IF EXISTS `pd2`$$

CREATE DEFINER=`user`@`%` PROCEDURE `pd2`(
    IN font VARCHAR(30), design_only TINYINT(1), OUT layers TEXT
)
BEGIN
        DECLARE layer TEXT;
        DECLARE links TEXT;
        IF (design_only = 1) THEN
            SET layer = "layer text";
        ELSE
            SET layer = CONCAT("layer text",font,"more layer text");        
        END IF;
        #Set the links for the design.
        SET links = "links";
        SELECT CONCAT(layer,links) INTO layers;
    END$$

DELIMITER ;

【问题讨论】:

    标签: mysql stored-procedures null output procedure


    【解决方案1】:

    找出问题所在。字体变量的选择返回 null,因为正在传递的选项不在数据库中。这导致了一连串的空数据。问题实际上不在代码中。

    【讨论】:

      猜你喜欢
      • 2019-01-25
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多