Denne konstruktion er ikke mulig:
HVIS UDFØR 'FINDER (VÆLG 1 FRA mintabel)' SÅ ...
Du kan forenkle til:
HVIS FINDER (VÆLG 1 FRA mintabel), SÅ ...
Men dit eksempel er nok forenklet. Til dynamisk SQL udført med EXECUTE
, læs manualen her. Du kan tjekke den specielle variabel FOUND
umiddelbart efter at have udført en DML-kommando for at se, om nogen rækker her påvirkede:
HVIS FUNDET SÅ...
Dog:
Bemærk især, at EXECUTE
ændrer outputtet af GET DIAGNOSTICS
, men ændrer ikke FOUND
.
Fed fremhævelse min. For en almindelig EXECUTE
gør dette i stedet:
...DECLARE i int;BEGIN UDFØR 'SELECT 1 FROM mytable'; -- noget dynamisk her GET DIAGNOSTICS i =ROW_COUNT; HVIS i> 0 SÅ ...
Eller hvis det er passende - især med kun resultater på én række - brug INTO
klausul med EXECUTE
for at få et resultat fra den dynamiske forespørgsel direkte. Jeg citerer manualen her:
Hvis der er angivet en række eller en variabelliste, skal den nøjagtigt matche strukturen af forespørgslens resultater (når en registreringsvariabel bruges, konfigurerer den sig selv til automatisk at matche resultatstrukturen). Hvis der returneres flere rækker, vil kun den første blive tildelt INTO
variabel. Hvis ingen rækker returneres, tildeles NULL til INTO
variabel(er).
...DECLARE _var1 int; -- init-værdien er NULL, medmindre andet bliver instrueret.