sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-syntaxisfout in geparametriseerde query op datum $1

Voorbereide verklaringen

De verklaring hiervoor is te vinden in het hoofdstuk Constanten van andere typen van de handleiding :

Vetgedrukte nadruk van mij.

Parameters voor voorbereide uitspraken zijn eigenlijk geen stekende letterlijke tekens maar typte waarden , dus u kunt het formulier type 'string' . niet gebruiken . Gebruik een van de andere twee vormen om de waarde naar een ander type te casten, zoals je zelf al hebt gevonden.

Voorbeeld:

PREPARE foo AS SELECT $1::date;

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

Vergelijkbaar met PQexecParams in de libpq C bibliotheek

De documentatie:

Het alternatief , zoals vermeld in het bovenstaande citaat, is om de OID's van de respectieve gegevenstypen door te geven met paramTypes[] - als je de cast echt nodig hebt. In de meeste gevallen zou het prima moeten werken om Postgres datatypes te laten afleiden uit de querycontext.

U kunt de OID van gegevenstypen ophalen uit de systeemcatalogus pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

U moet de juiste interne typenaam gebruiken. Bijvoorbeeld:int4 voor integer .
Of met een gemak cast naar regtype :

SELECT 'date'::regtype::oid;

Dit is flexibeler omdat bekende aliassen voor de typenaam ook worden geaccepteerd. Bijvoorbeeld:int4 , int of integer voor integer .



  1. Hoe automatisch identiteit voor een Oracle-database genereren via Entity Framework?

  2. Combineer meerdere rijen in één MySQL Join

  3. Heterogene databasereplicatie configureren – SQL Server naar Oracle

  4. Logische AND-operator in mySql REGEXP?