andreaspr@aon.at
14-11-11, 10:09
Hallo,
mein Kollege hat scheinbar einen Bug in SQL (7.1) gefunden.
Folgendes ist passiert:
Delete From Tab1 where CO = 1 and WF = 'XXX' and SA = 'YYY'
Es gibt ein LF TAB1L2 (DDS) mit den entsprechenden Keys und SA CMP(EQ 'XY')
Dem Plancache zufolge verwendet der Optimizer für die Auswahl der Sätze die TAB1L2.
Beim Lesen der TAB1L2 ist zu sehen, dass NUR die Schlüsselwörter CO = 1 und WF = 'XXX' verwendet werden.
Grundsätzlich auch richtig so, da dieses LF nur Sätze beinhaltet mit SA = 'XY', wenn in der Delete-Bedingung auch SA='XY' stehen würde!!
Fehler:
Es werden Sätze der SA (Satzart) 'XY' gelöscht und nicht die mit 'YYY'.
Im "Final Select" Schritt sind im Satz "Host Variable Values" die korrekten Werte (1, 'XXX', 'YYY'). Dennoch wird die TAB1L2 verwendet.
Ursache:
Der Grund warum ein falsches LF verwendet wurde, dürfte der sein, dass das gleiche DELETE zuvor mit SA='XY' ausgeführt wurde.
Drehe ich nun den Spieß um und führe zuerst das DELETE mit SA = 'YYY' aus, so wird für beide DELETEs auf die TAB1L3 (SA CMP(EQ 'YYY') zugegriffen. Ein ab und anmelden ist zuvor jedoch notwendig.
mein Kollege hat scheinbar einen Bug in SQL (7.1) gefunden.
Folgendes ist passiert:
Delete From Tab1 where CO = 1 and WF = 'XXX' and SA = 'YYY'
Es gibt ein LF TAB1L2 (DDS) mit den entsprechenden Keys und SA CMP(EQ 'XY')
Dem Plancache zufolge verwendet der Optimizer für die Auswahl der Sätze die TAB1L2.
Beim Lesen der TAB1L2 ist zu sehen, dass NUR die Schlüsselwörter CO = 1 und WF = 'XXX' verwendet werden.
Grundsätzlich auch richtig so, da dieses LF nur Sätze beinhaltet mit SA = 'XY', wenn in der Delete-Bedingung auch SA='XY' stehen würde!!
Fehler:
Es werden Sätze der SA (Satzart) 'XY' gelöscht und nicht die mit 'YYY'.
Im "Final Select" Schritt sind im Satz "Host Variable Values" die korrekten Werte (1, 'XXX', 'YYY'). Dennoch wird die TAB1L2 verwendet.
Ursache:
Der Grund warum ein falsches LF verwendet wurde, dürfte der sein, dass das gleiche DELETE zuvor mit SA='XY' ausgeführt wurde.
Drehe ich nun den Spieß um und führe zuerst das DELETE mit SA = 'YYY' aus, so wird für beide DELETEs auf die TAB1L3 (SA CMP(EQ 'YYY') zugegriffen. Ein ab und anmelden ist zuvor jedoch notwendig.