sql >> Databáze >  >> RDS >> PostgreSQL

Chyba syntaxe PostgreSQL v parametrizovaném dotazu k datu $1

Připravená prohlášení

Vysvětlení tohoto lze nalézt v kapitole Konstanty jiných typů příručky :

Tučné zdůraznění moje.

Parametry pro připravené příkazy ve skutečnosti nejsou sting literály ale zadali hodnoty , takže nemůžete použít formulář type 'string' . Použijte jeden z dalších dvou formulářů k přetypování hodnoty na jiný typ, jako jste se již našli.

Příklad:

PREPARE foo AS SELECT $1::date;

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

Podobné pro PQexecParams v knihovně libpq C

Dokumentace:

alternativa , jak je uvedeno v citaci výše, je předat OID příslušných datových typů pomocí paramTypes[] - pokud skutečně potřebujete obsazení. Ve většině případů by mělo fungovat dobře, když necháte Postgres odvozovat datové typy z kontextu dotazu.

OID datových typů můžete získat ze systémového katalogu pg_type :

SELECT oid FROM pg_type WHERE typname = 'date';

Musíte použít správný interní název typu. Například:int4 pro integer .
Nebo s pohodlným obsazením do regtype :

SELECT 'date'::regtype::oid;

To je flexibilnější, protože jsou akceptovány i známé aliasy pro název typu. Například:int4 , int nebo integer pro integer .



  1. Oracle regex - nezačíná a nekončí

  2. Limit velikosti MySQL VARCHAR

  3. Oracle SQL INNER Join založený na neodpovídajících hodnotách

  4. PostgreSQL vrátí funkci s uživatelským typem dat