MySQL存储过程,一个INSERT不能使用不同的字段名称?

时间:2011-08-11 16:14:14

标签: mysql stored-procedures

这是一个非常奇怪的问题,所以首先我会发布这个程序:

DELIMITER $$

USE `blahblahblah`$$

DROP PROCEDURE IF EXISTS `duplicateTradeIn`$$

CREATE DEFINER=`blahblahblah` PROCEDURE `duplicateTradeIn`(duplicate_claim INT(12))
BEGIN

DECLARE valuation INT(12) DEFAULT 0;
DECLARE claim INT(12) DEFAULT 0;
DECLARE serialNumber VARCHAR(255);
DECLARE duplicates INT(12);
DECLARE i INT(12) DEFAULT 1;
DECLARE claimID INT(12);

SET @claimID = duplicate_claim;
SET @duplicates = (SELECT COUNT(*) FROM `duplicates`);
SET @i = 1;

WHILE @i <= @duplicates DO

    SET @serialNumber = (SELECT `serial` FROM `duplicates` WHERE id = @i);

    INSERT INTO valuations (`pID`,`boughtproduct`,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`brand`,`qty`,`created`,`valuationStatus`)
    SELECT `pID`,`boughtproduct`,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`brand`,`qty`,`created`,`valuationStatus`
    FROM valuations WHERE vID = (SELECT vID FROM claims WHERE cID = @claimID);

    SET @valuation = (SELECT LAST_INSERT_ID());

    INSERT INTO claims (`vID`, `pID`, `email`, `title`, `firstname`, `lastname`, `customerType`, `company`, `position`, `address1`,`address2`,`town`,`county`,`postCode`,`telephone`,`mobile`,`emailBusiness`,`emailConsumer`,`contactPost`,`contactTelephone`,`contactMobile`,`contactEmail`,`invoiceNum`,`invoiceDate`,`invoiceInc`,`reseller`,`dateOfOrder`,`heardAbout`,`salesPerson`,`method`,`cleanseCert`,`blanccoCert`,`created`,`modified`,`noInvEmailDated`,`lateRejEmailSent`,`invAddressEmailSent`,`revalueEmailSent`,`signed`,`dated`,`sessionID`,`received`,`receiptSent`,`processedDate`,`validatedDate`,`rejectedDate`,`rejectReason`,`notes`,`claimStatus`,`origin`,`invoiceexported`)
    SELECT @valuation, `pID`, `email`, `title`, `firstname`, `lastname`, `customerType`, `company`, `position`, `address1`,`address2`,`town`,`county`,`postCode`,`telephone`,`mobile`,`emailBusiness`,`emailConsumer`,`contactPost`,`contactTelephone`,`contactMobile`,`contactEmail`,`invoiceNum`,`invoiceDate`,`invoiceInc`,`reseller`,`dateOfOrder`,`heardAbout`,`salesPerson`,`method`,`cleanseCert`,`blanccoCert`,`created`,`modified`,`noInvEmailDated`,`lateRejEmailSent`,`invAddressEmailSent`,`revalueEmailSent`,`signed`,`dated`,`sessionID`,`received`,`receiptSent`,`processedDate`,`validatedDate`,`rejectedDate`,`rejectReason`,`notes`,`claimStatus`,`origin`,`invoiceexported`
    FROM claims WHERE cID = @claimID;

    SET @claim = (SELECT LAST_INSERT_ID());

    INSERT INTO documents (`claimid`,`serial`,`filename`,`filenameOrig`,`filenameTemp`,`filetype`,`filesize`)
    SELECT @claim,`serial`,`filename`,`filenameOrig`,`filenameTemp`,`filetype`,`filesize`
    FROM documents WHERE claimid = @claimID;

    INSERT INTO redemptions (`cID`,`pID`,`prID`,`bundleNo`,`serialNum`,`price`,`cashback`,`created`,`modified`,`claimStatus`)
    SELECT @claim,`pID`,`prID`,`bundleNo`,@serialNumber,`price`,`cashback`,`created`,`modified`,`claimStatus`
    FROM redemptions WHERE cID = @claimID;

    INSERT INTO tradeins (`vID`,`cID`,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`created`,`brand`,`claimStatus`)
    SELECT @valuation,@claim,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`created`,`brand`,`claimStatus`
    FROM tradeins WHERE cID = @claimID;

    SET @i = (@i + 1);

END WHILE;
END$$

DELIMITER ;
编辑:对不起!

问题是当它试图插入文档时(所以请参阅文档表插入)。如果我在WHERE子句中重命名列(claimid)并且INSERT到cID(通过更改表和查询)它可以工作,但是当它被命名为claimid而不是cID时,它拒绝插入新行。如果您对此有任何想法或见解,我们将不胜感激。

试着澄清:

包含字段和查询的文档表作为cID而非claimid工作。 带有字段和查询作为claimid的文档表不会插入行。

所有其他查询似乎都运行正常,只有我才能在文档表中尝试cID,因为这是唯一的区别。

再次对此前的含糊不清感到抱歉,我希望现在的问题更加清晰。

谢谢!

1 个答案:

答案 0 :(得分:0)

要清除这一点。这是我所说的,也许是mySQL中的一个错误?如果存在具有ID名称不同的字段的表。在此示例cID和claimid中,它将无法识别第二个声明的字段claimid而不执行查询。

为了使其工作,我必须将文件表从claimID修改为cID。