gpt4 book ai didi

MySQL 过程不会执行任何操作

转载 作者:行者123 更新时间:2023-11-29 23:56:15 26 4
gpt4 key购买 nike

此存储过程应在外键的 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;

最佳答案

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

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

关于MySQL 过程不会执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25326082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com