sql >> Database >  >> RDS >> PostgreSQL

PL/pgSQL presteren versus uitvoeren

PERFORM is het plpgsql-commando dat wordt gebruikt voor het aanroepen van void-functies. PLpgSQL is voorzichtig met nutteloze SELECT statements - de SELECT zonder INTO clausule is niet toegestaan. Maar soms moet je een functie aanroepen en hoef je het resultaat niet op te slaan (of functies hebben geen resultaat). De functie in SQL wordt aangeroepen met SELECT uitspraak. Maar het is niet mogelijk in PLpgSQL - dus het commando PERFORM werd geïntroduceerd.

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;
$$;

De PERFORM statements voeren een parameter uit en zijn het resultaat vergeten.

Uw voorbeeld perform 'create table foo as (select 1)';

is hetzelfde als SELECT 'create table foo as (select 1)' . Het retourneert een string "create table foo as (select 1)" en deze string wordt verwijderd.

De EXECUTE statement evalueer een expressie om string te krijgen. In de volgende stap wordt deze string uitgevoerd.

Dus EXECUTE 'create table ' || some_var || '(a int)'; heeft twee stappen

  1. uitdrukking evalueren 'create table ' || some_var || '(a int)'
  2. if some_var is mytab bijvoorbeeld, voer dan een commando uit create table mytab(a int)

De PERFORM statement wordt gebruikt voor functieaanroepen, wanneer functies niet worden gebruikt in toewijzingsstatement. De EXECUTE wordt gebruikt voor evaluatie van dynamische SQL - wanneer een vorm van SQL-commando bekend is in runtime.



  1. Hoe rijen te ordenen op groepssom in SQL

  2. Waar in gebruiken in spring-jdbc

  3. Tabeltransformatie / veldparsing in PL/SQL

  4. Hoe sla je wetenschappelijke notatienummers op in MySQL