Bug #11630
Updated by Enis Nuredini about 2 years ago
Im IK-Tool #11625 hat das SQL 'CALL()' noch funktioniert mit 20.4.1. Nach dem Update auf 20.11.0 funktioniert es nicht mehr.
In #11325 wurde CALL() angeblich implementiert (fuer 20.11.0) - es muss aber vorher schon mal funktioniert haben! Und nun, nachdem es neu implementiert ist, funktioniert es nicht mehr. Das macht alles kein Sinn.
Code aus IK Tool:
<pre>
# Action: 'moveToPool'
10 {
sql = SELECT '' FROM (SELECT '') AS fake WHERE '{{action:SE}}' = 'moveToPool'
10.sql = SELECT '' FROM (SELECT '') AS fake WHERE {{grIdPool:S0}}={{grIdPool2Bm:R}}
10.10.sql = CALL copyApplicationPostingUpload(@srcId:={{apId:S0}})
20.sql = UPDATE Application
SET grIdPool = {{grIdPool:S0}},
dateReceipt = IF( {{grIdPool:S0}}={{grIdPool2Bm:R}}, NOW(), dateReceipt),
finalCostCategory = IF({{grIdPool:S0}}={{grIdPool1Bm:R}},
CASE
WHEN totalCost=0 THEN ''
WHEN totalCost<100000 THEN 'below 100k'
WHEN totalCost<250000 THEN '100k to 250k'
ELSE 'above 250k'
END,
finalCostCategory)
WHERE id = {{apId:S0}} AND '{{action:SE}}' = 'moveToPool'
}
</pre>
<pre>
DELIMITER $$
CREATE DEFINER=`admino`@`localhost` PROCEDURE `copyApplicationPostingUpload`(IN `srcId` INT)
MODIFIES SQL DATA
SQL SECURITY INVOKER
BEGIN
CREATE TEMPORARY TABLE `tmp` SELECT * FROM Application WHERE 0;
INSERT INTO `tmp` SELECT * FROM `Application` WHERE id=@srcId;
UPDATE `tmp` SET id=0, srcId=@srcId, created=NOW(), modified=NOW();
INSERT INTO `Application` SELECT * FROM `tmp`;
/* Variable will be used in QFQ after copying application */
SET @newId=LAST_INSERT_ID();
DROP TABLE `tmp`;
CREATE TEMPORARY TABLE `tmp` SELECT * FROM `Posting` WHERE 0;
INSERT INTO `tmp` SELECT `po`.* FROM `Posting` AS po, `Ggroup` AS gr WHERE po.apId=@srcId AND po.grId=gr.id AND gr.reference='mi_posting_nicht_budgetierte_mittel';
UPDATE `tmp` SET id=0, apId=@newId, created=NOW(), modified=NOW();
INSERT INTO `Posting` SELECT * FROM `tmp`;
DROP TABLE `tmp`;
CREATE TEMPORARY TABLE `tmp` SELECT * FROM `Note` WHERE 0;
INSERT INTO `tmp` SELECT `no`.* FROM `Note` AS no, `Ggroup` AS gr, Ggroup AS grFilter WHERE no.apId=@srcId AND no.grId=gr.id AND gr.grId=grFilter.id AND grFilter.reference='mi_upload';
UPDATE `tmp` SET id=0, apId=@newId, created=NOW(), modified=NOW();
INSERT INTO `Note` SELECT * FROM `tmp`;
DROP TABLE `tmp`;
END$$
DELIMITER ;
</pre>
*Befuerchtung:*
* In 20.4.1 war noch Code in QFQ das `CALL()` funktioniert und dieser Code ist bis 20.11.0 verloren gegangen.
* Warum funktioniert es nicht, obwohl CR das als 'fixed/implemented' markiert hat in 20.11.0.