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

brug \set variabel inde i plpgsql erklære blok

Forklaringen er ifølge manualen :

Brødteksten af ​​DO statement er en streng, der er citeret i dollar. Så ingen interpolation inde i strengen.

Da det skal være en bogstavelig streng, kan du heller ikke sammenkæde strenge i farten. Manualen:

Men du kan sammenkæde strengen og derefter udføre den.

Fed fremhævelse min. Du skal bare få det rigtige citat:

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=#

Men jeg vil hellere oprette en (midlertidig) funktion og videregive værdien som parameter (hvor psql-interpolation virker). Detaljer i dette relaterede svar på dba.SE:




  1. hvordan man implementerer en kompliceret sql-kommando

  2. Drej dynamiske kolonner, ingen aggregation

  3. Indsættelse af data i flere tabeller PHP MySQL

  4. logge ind som bruger eller admin fra 2 forskellige borde