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

PostgreSQL-syntaksfejl i parametriseret forespørgsel på dato $1

Forberedte erklæringer

Forklaringen på dette kan findes i kapitlet Konstanter af andre typer i manualen :

Fed fremhævelse mine.

Parametre for forberedte udsagn er faktisk ikke stik-literal men skrev værdier , så du kan ikke bruge formen skriv 'streng' . Brug en af ​​de to andre former til at caste værdien til en anden type, som om du allerede har fundet dig selv.

Eksempel:

PREPARE foo AS SELECT $1::date;

EXECUTE foo('2005-1-1');

Lignende for PQexecParams i libpq C-biblioteket

Dokumentationen:

alternativet , som nævnt i citatet ovenfor, er at videregive OID'erne for de respektive datatyper med paramTypes[] - hvis du rent faktisk har brug for rollebesætningen. I de fleste tilfælde burde det fungere fint at lade Postgres udlede datatyper fra forespørgselskonteksten.

Du kan hente OID for datatyper fra systemkataloget kode>pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Du skal bruge det korrekte interne typenavn. For eksempel:int4 for heltal .
Eller med en bekvem cast til regtype :

SELECT 'date'::regtype::oid;

Dette er mere fleksibelt, da kendte aliaser for typenavnet også accepteres. For eksempel:int4 , int eller heltal for heltal .



  1. Hvordan bruger man hvidlister og forberedte erklæringer med Postgresql i php?

  2. Overvåge MySQL-tabel for ændringer i et C#-program?

  3. optimer nærmeste naboforespørgsel på 70 millioner rumlig punktsky med ekstrem høj tæthed på SQL Server 2008

  4. MySQL starter ikke som service