MySQL程序不会做任何事情

时间:2014-08-15 12:03:32

标签: mysql sql stored-procedures

此存储过程应在SELECT之后为外键插入条目。目前,它什么都没做。当我CALL它时,它不会给我一个错误或任何内容,也不会插入记录。

我可以在一个程序中做多件事(SELECT,UPDATE,INSERT ..)吗?如果是的话,我在这里错过了什么?如果在运行其中一个(更新/插入/选择)时出错,我应该收到错误吗?

DELIMITER $$

CREATE PROCEDURE `InserAndAttachReferencia` (
                IN refereciaText VARCHAR(45),
                IN attachTo INT unsigned,
                OUT insid INT unsigned
            )
BEGIN
    -- SELECT THE REP_ID 
    DECLARE attachToRepID INT UNSIGNED DEFAULT 0;

    SELECT id
    INTO attachToRepID
    FROM AlkReferencia
    WHERE id=attachTo;
    -- INSERTING THE NEW ENTRY WITH GIVEN REP_ID
    INSERT INTO AlkReferencia (id,rep_id,csatolva_id,referencia)
    VALUES(null,attachToRepID,attachTo,referenciaText);
    SET insid = LAST_INSERT_ID();   
END

编辑.: 是的,最后的更新在这里没用,应该在插入时设置rep_id,但这不是问题。 (复制自我的其他程序之一,当我需要最后一次更新时...)..已修复问题。

表:

-- -----------------------------------------------------
-- Table `AlkatreszDb`.`AlkReferencia`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `AlkatreszDb`.`AlkReferencia` ;

CREATE TABLE IF NOT EXISTS `AlkatreszDb`.`AlkReferencia` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `rep_id` INT UNSIGNED NULL,
  `csatolva_id` INT UNSIGNED NULL,
  `referencia` VARCHAR(45) NOT NULL,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_AlkReferencia_AlkReferencia1_idx` (`rep_id` ASC),
  INDEX `fk_AlkReferencia_AlkReferencia2_idx` (`csatolva_id` ASC),
  CONSTRAINT `fk_AlkReferencia_AlkReferencia1`
    FOREIGN KEY (`rep_id`)
    REFERENCES `AlkatreszDb`.`AlkReferencia` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_AlkReferencia_AlkReferencia2`
    FOREIGN KEY (`csatolva_id`)
    REFERENCES `AlkatreszDb`.`AlkReferencia` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

2 个答案:

答案 0 :(得分:0)

这不太可能解决您的问题,但您可以将代码简化为:

INSERT INTO AlkReferencia(rep_id, csatolva_id, referencia)
    SELECT ar.id, attachTo, referenciaText
    FROM AlkReferencia ar
    WHERE ar.id = attachTo;

我还会在变量名前加上v_(或其他东西),以区别于列名。这通常是存储过程中的错误来源:

INSERT INTO AlkReferencia(rep_id, csatolva_id, referencia)
    SELECT ar.id, v_attachTo, v_referenciaText
    FROM AlkReferencia ar
    WHERE ar.id = v_attachTo;

编辑:

这段代码非常可疑:

SELECT id
INTO attachToRepID
FROM AlkReferencia
WHERE id = attachTo;

为什么不使用attachTo?您是否打算将其中一个引用真的变为csatolva_id

答案 1 :(得分:0)

你说你的代码什么也没输出。您是否尝试使用参数执行EXEC程序?