sql >> Database >  >> RDS >> PostgreSQL

gebruik \set variabele binnen plpgsql declare block

De uitleg is, volgens de handleiding :

De hoofdtekst van de DO statement is een tekenreeks tussen aanhalingstekens in dollars. Dus geen interpolatie binnen de string.

Omdat het een letterlijke string moet zijn, kun je strings ook niet on-the-fly aaneenschakelen. De handleiding:

Maar je kunt de string samenvoegen en dan uitvoeren.

Vetgedrukte nadruk van mij. Je hoeft alleen maar het citaat goed te krijgen:

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

Maar ik zou liever een (tijdelijke) functie maken en de waarde doorgeven als parameter (waarbij psql-interpolatie werkt). Details in dit gerelateerde antwoord op dba.SE:




  1. Wijzig de startwaarde van Django AutoField

  2. importeer mysql-gegevens naar hdfs (hadoop 2.4.1) met behulp van sqoop (1.4.5)

  3. Scripts genereren voor alle triggers in de database met Microsoft SQL Server Management Studio

  4. mysql:foutcode [1267]; Illegale mix van sorteringen (latin1_general_cs,IMPLICIT) en (latin1_swedish_ci,IMPLICIT) voor bewerking '='