sql >> Database teknologi >  >> RDS >> PostgreSQL

Dynamisk SQL (EXECUTE) som betingelse for IF-sætning

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.

  1. Fjern flere arrays parallelt

  2. Gem PL/pgSQL-output fra PostgreSQL til en CSV-fil

  3. Brug af MySQL med Oracle Heterogene Services

  4. ORACLE Connect by klausul tilsvarende i SQL Server