sql >> Databáze >  >> RDS >> PostgreSQL

PL/pgSQL provádět vs

PERFORM je příkaz plpgsql používaný pro volání funkcí void. PLpgSQL si dává pozor na zbytečné SELECT příkazy - SELECT bez INTO doložka není povolena. Někdy ale potřebujete zavolat funkci a nemusíte ukládat výsledek (nebo funkce nemají žádný výsledek). Funkce v SQL se volá pomocí SELECT tvrzení. V PLpgSQL to ale nejde - takže příkaz PERFORM byl představen.

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 příkazy spouštějí parametr a zapomínají výsledek.

Váš příklad perform 'create table foo as (select 1)';

je stejný jako SELECT 'create table foo as (select 1)' . Vrátí řetězec „vytvořit tabulku foo jako (vyberte 1)“ a tento řetězec se zahodí.

EXECUTE příkaz vyhodnotit výraz pro získání řetězce. V dalším kroku se tento řetězec provede.

Takže EXECUTE 'create table ' || some_var || '(a int)'; má dva kroky

  1. vyhodnotit výraz 'create table ' || some_var || '(a int)'
  2. pokud some_var je například mytab, pak spusťte příkaz create table mytab(a int)

PERFORM příkaz se používá pro volání funkcí, když se funkce nepoužívají v příkazu přiřazení. EXECUTE se používá pro vyhodnocení dynamického SQL - když je známa forma SQL příkazu za běhu.



  1. Dotaz se zástupným znakem a tečkou, která neodpovídají datům s indexem Oracle Text

  2. postup v mysql

  3. Java – Import z MySQL do Hive, kde MySQL běží na Windows a Hive na Cent OS (Horton Sandbox)

  4. Jak odstranit řádek v SQL