sql >> Databasteknik >  >> RDS >> PostgreSQL

använd \set variabel inuti plpgsql deklarera block

Förklaringen är enligt manualen :

Brödtexten i DO uttalande är en sträng som noteras i dollar. Så ingen interpolation inuti strängen.

Eftersom det måste vara en bokstavlig sträng kan du inte heller sammanfoga strängar i farten. Handboken:

Men du kan sammanfoga strängen och sedan köra den.

Djärv betoning min. Du måste bara göra rätt 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 jag skulle hellre skapa en (tillfällig) funktion och skicka värdet som parameter (där psql-interpolation fungerar). Detaljer i detta relaterade svar på dba.SE:




  1. MYSQL okänd klausul join kolumn i nästa join

  2. Uppgradera WAMP till MySQL 5.5?

  3. Skriptuppsättning av databaspost

  4. MySQL - Uppdatera tabellrader utan att låsa raderna