Подготвени отчети
Обяснението за това може да се намери в главата Константи от други типове от ръководството :
Удебелен акцент е мой.
Параметрите за подготвени изрази всъщност не са литерали на ужилване но въведени стойности , така че не можете да използвате формата type 'string'
. Използвайте един от другите два формуляра, за да прехвърлите стойността към различен тип, както вече сте се открили.
Пример:
PREPARE foo AS SELECT $1::date;
EXECUTE foo('2005-1-1');
Подобно за PQexecParams
в библиотеката libpq C
Документацията:
Алтернативата , както е споменато в цитата по-горе, е да предава OID на съответните типове данни с paramTypes[]
- ако наистина имате нужда от актьорския състав. В повечето случаи трябва да работи добре, за да позволи на Postgres да извлича типове данни от контекста на заявката.
Можете да получите OID на типовете данни от системния каталог pg_type
:
SELECT oid FROM pg_type WHERE typname = 'date';
Трябва да използвате правилното име на вътрешен тип. Например:int4
за integer
.
Или с удобно прехвърляне към regtype
:
SELECT 'date'::regtype::oid;
Това е по-гъвкаво, тъй като се приемат и известни псевдоними за името на типа. Например:int4
, int
или integer
за integer
.