sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL-syntaxfel i parametriserad fråga på datum $1

Förberedda uttalanden

Förklaringen till detta finns i kapitlet Konstanter av andra typer i manualen :

Djärv betoning min.

Parametrar för förberedda satser är faktiskt inte sting literals men skrev värden , så du kan inte använda formuläret type 'string' . Använd en av de två andra formerna för att konvertera värdet till en annan typ, som om du redan har hittat dig själv.

Exempel:

PREPARE foo AS SELECT $1::date;

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

Liknande för PQexecParams i libpq C-biblioteket

Dokumentationen:

alternativet , som nämnts i citatet ovan, är att skicka OID för respektive datatyper med paramTypes[] - om du verkligen behöver gipset. I de flesta fall borde det fungera alldeles utmärkt att låta Postgres härleda datatyper från frågekontexten.

Du kan hämta OID för datatyper från systemkatalogen pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Du måste använda rätt interna typnamn. Till exempel:int4 för integer .
Eller med en bekvämlighet cast till regtype :

SELECT 'date'::regtype::oid;

Detta är mer flexibelt eftersom kända alias för typnamnet också accepteras. Till exempel:int4 , int eller integer för integer .



  1. Android Sqlite Infoga om det inte finns

  2. Upsert med attribut inkluderat updated_at

  3. MySQL efter infogningsutlösare får automatiskt ökat värde, uppdatera fältvärde efter infogning ger okänt kolumnfel

  4. UnsupportedOperationException med DriverManager.getConnection() på Android