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

použijte proměnnou \set uvnitř deklaračního bloku plpgsql

Vysvětlení je, podle manuálu :

Tělo DO příkaz je řetězec v dolarech. Takže žádná interpolace uvnitř řetězce.

Vzhledem k tomu, že se musí jednat o doslovný řetězec, také nelze řetězce zřetězit za běhu. Příručka:

Ale můžete řetězec zřetězit a pak jej spustit.

Odvážný důraz můj. Musíte jen správně citovat:

test=# \set test 'some value'
test=# \set code 'DECLARE v_test text := ' :'test' '; BEGIN RAISE NOTICE ''test var is: %'', v_test; END'
test=# DO :'code';
NOTICE: test var is: some value
DO
test=#

Ale raději bych vytvořil (dočasnou) funkci a předal hodnotu jako parametr (kde funguje interpolace psql). Podrobnosti v této související odpovědi na dba.SE:




  1. Funkce SQL Server ROUND():K čemu slouží a proč by vás to mělo zajímat?

  2. Jak CHAR() funguje v MariaDB

  3. Vložení pole bajtů[] jako blob do databáze Oracle získávání ORA-01460:byla požadována neimplementovaná nebo nepřiměřená konverze

  4. Démon MySQL se odmítá spustit pomocí Nelze spustit server:Připojit k portu TCP/IP:Adresa se již používá (není).