sql >> Databasteknik >  >> RDS >> PostgreSQL

PL/pgSQL utföra vs exekvera

PERFORM är plpgsql-kommandot som används för anrop av void-funktioner. PLpgSQL är försiktig med värdelösa SELECT satser - SELECT utan INTO klausul är inte tillåten. Men ibland behöver du anropa en funktion och du behöver inte lagra resultat (eller så har funktioner inget resultat). Funktionen i SQL anropas med SELECT påstående. Men det är inte möjligt i PLpgSQL - så kommandot PERFORM introducerades.

CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN
  RAISE NOTICE 'Hello from void function';
END;
$$ LANGUAGE plpgsql;

-- direct call from SQL
SELECT foo();

-- in PLpgSQL
DO $$
BEGIN
  SELECT foo(); -- is not allowed
  PERFORM foo(); -- is ok
END;
$$;

PERFORM satser exekverar en parameter och glömde resultatet.

Ditt exempel perform 'create table foo as (select 1)';

är samma som SELECT 'create table foo as (select 1)' . Den returnerar en sträng "skapa tabell foo som (välj 1)" och den här strängen kasseras.

EXECUTE sats utvärdera ett uttryck för att få sträng. I nästa steg exekveras denna sträng.

EXECUTE 'create table ' || some_var || '(a int)'; har två steg

  1. utvärdera uttrycket 'create table ' || some_var || '(a int)'
  2. if some_var är mytab till exempel, kör sedan kommandot create table mytab(a int)

PERFORM sats används för funktionsanrop, när funktioner inte används i tilldelningssats. EXECUTE används för utvärdering av dynamisk SQL - när en form av SQL-kommando är känd i runtime.



  1. Uppdatera en tabell och returnera sedan uppdaterade rader i mySQL

  2. Behöver hjälp med unpivot i mysql med flera datumkolumner

  3. MySQL-fråga för att få ålder från födelsedatum

  4. Varför mysql hit index när kolumn wrap med datum funktion