Хранимая процедура MySQL, одна INSERT не работает с другим именем поля? - PullRequest
0 голосов
/ 11 августа 2011

Это довольно странная проблема, поэтому сначала я опубликую процедуру:

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 ;

РЕДАКТИРОВАТЬ: Извините!

Проблема в том, что он пытается вставить в документы (см. Вставку таблицы документов). Если я переименую столбец (idaid) в предложении WHERE и вставлю в cID (изменив таблицу и запрос), он сработает, но в противном случае он не вставит новые строки, когда ему будет присвоено имяidid, а не cID. Если у вас есть какие-либо идеи или понимание этого, мы будем очень признательны.

Чтобы попытаться уточнить:

Таблица документов с полем и запросом, поскольку cID не заявлен, работает. Таблица документов с полем и запросом в качестве претензии не вставляет строки.

Все остальные запросы, похоже, работают нормально, и мне пришло в голову попробовать только cID в таблице документов, поскольку это было единственным отличием.

Снова прошу прощения за неопределенность раньше, и я надеюсь, что вопрос теперь яснее.

Спасибо!

1 Ответ

0 голосов
/ 02 ноября 2011

Просто чтобы прояснить это. Это, как я уже сказал, и, возможно, ошибка в MySQL? Если есть таблица с полем, где имя ID отличается. В этом примере cID и Applicid не будет распознавать второе объявленное поле Applicid и не будет выполнять запрос.

Для того, чтобы это работало, мне пришлось пересмотреть таблицу документов с requestID до cID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...