sql >> Database >  >> RDS >> PostgreSQL

Positionele parameter ($1,..) gebruiken in psql

U kunt psql-variabelen gebruiken . Die worden geïnterpoleerd in SQL-code. Per documentatie:

Merk op dat (per documentatie ):

U kunt dus niet werken met positionele parameters van de vorm $1 . Ik neem aan dat je deze stukjes code kopieert van functieteksten, en dat is de reden voor de positionele parameters?
Sinds PostgreSQL 9.2 kunnen zelfs SQL-functies naar parameters verwijzen op naam. Per documentatie:

PL/pgSQL-functies ondersteunen benoemde parameters in de functietekst sinds v8.0.

Mijn voorkeur voor naamgeving is om functieparameters vooraf te laten gaan door _ naamconflicten te voorkomen. Maar dat is een kwestie van smaak en stijl.

Slechts een halve oplossing

Uw voorbeeld zou dus als volgt kunnen werken:

db=> \set _name 'troy'
db=> \set _email '[email protected]'
db=> select * from users where name=:'_name' and email=:'_email'; 

U moet nog steeds queryreeksen voorbereiden ...
Let op de aanhalingstekens in :'_name' . Dat heeft hetzelfde effect als het toepassen van quote_literal() op het touw. Details in de handleiding.



  1. if elseif-voorwaarden in mysql-query

  2. Wat is het verschil tussen libmysqlclient.a en libmysqlclient_r.a?

  3. Ongewenst resultaat van db:raw

  4. Hoe op te lossen Azure Windows-aanmeldingen worden niet ondersteund in deze versie van SQL Server?