Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как передать значение поля в SPI_execute_plan
|
|||
|---|---|---|---|
|
#18+
Имеется подготовленный и сохраненный план. Имеется строка-значение, которую нужно передать в SPI_execute_plan. Как преобразовать эту строку в Datum? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 14:29 |
|
||
|
Как передать значение поля в SPI_execute_plan
|
|||
|---|---|---|---|
|
#18+
HordiИмеется подготовленный и сохраненный план. Имеется строка-значение, которую нужно передать в SPI_execute_plan. Как преобразовать эту строку в Datum? преобразование к датуму имеет несколько нюансов.. 1) функция преобразования к датуму - должна быть соответствующая (как я понимаю, кодировка представления чтоб совпадала)...Для массива байт это PointerGetDatum(x). Кстати можете описание найти в ашнике постгресса postgres.h 2) Время жизни выделенной памяти. Надо не забывать, так же что существует понятие контекст памяти... вроде так... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 14:58 |
|
||
|
Как передать значение поля в SPI_execute_plan
|
|||
|---|---|---|---|
|
#18+
PointerGetDatum пробовал - вылетает база на выполнении SPI_execute_plan :( Указатель передавал действительный 100% (специально предварительно копии строк создал). Копии строк делал через palloc,memcpy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 15:42 |
|
||
|
Как передать значение поля в SPI_execute_plan
|
|||
|---|---|---|---|
|
#18+
HordiPointerGetDatum пробовал - вылетает база на выполнении SPI_execute_plan .... тогда глупые вопросы... 1) есть ли SPI_prepare(бла-бла-бла); не спотыкаеться ли на нём ? если есть - я так понимаю что подготовка проходит успешно... 2) что пишет сам постгресс на данной ошипке...см.. PG_TRY(); { бла-бла-бла } PG_CATCH(); { бла-бла-бла ErrorData* pED = NULL; pED = CopyErrorData(); см. структуру... FlushErrorState(); бла-бла-бла } PG_END_TRY(); 3) все ли параметры передаються ? SPI_execute_plan(void *plan, Datum *Values, const char *Nulls, bool read_only, int tcount); типа... arg_types[0] = TEXTOID; void * plan = SPI_prepare(sql, 2, arg_types); if (nulls[0] == ' ') args[0] = PointerGetDatum(value); int ret = SPI_execute_plan(plan, args, nulls, false, 0); 4) есть ли инструкция типа SPI_CONNECT 5) проходит ли в данном месте вызовы просче...типа... SPI_exec(sql, 0); с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 19:00 |
|
||
|
Как передать значение поля в SPI_execute_plan
|
|||
|---|---|---|---|
|
#18+
В общем разобрался в чем проблема. Передаваемые значения в Datum должны иметь стандартный в посгресе формат, такой как у получаемых параметрах функций и в значениях, которые эти функции возвращают. Т.е. строка (или иной параметр) должна формироваться по такому (или подобному) правилу: const int SZ = sizeof("txt")-1; text *p = (text*)palloc(SZ+VARHDRSZ); VARATT_SIZEP(p) = SZ+VARHDRSZ; memcpy(VARDATA(p),"txt",SZ); Datum dt[1]; dt[0] = CStringGetDatum(p); ret = SPI_execute_plan(plan,dt,... pfree(p); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 11:06 |
|
||
|
Как передать значение поля в SPI_execute_plan
|
|||
|---|---|---|---|
|
#18+
Проебразование (char *) в Datum: Код: plaintext Код: plaintext Код: plaintext Код: plaintext Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 18:26 |
|
||
|
Как передать значение поля в SPI_execute_plan
|
|||
|---|---|---|---|
|
#18+
HordiВ общем разобрался в чем проблема. Передаваемые значения в Datum должны иметь стандартный в посгресе формат, такой как у получаемых параметрах функций и в значениях, которые эти функции возвращают. Т.е. строка (или иной параметр) должна формироваться по такому (или подобному) правилу: const int SZ = sizeof("txt")-1; text *p = (text*)palloc(SZ+VARHDRSZ); VARATT_SIZEP(p) = SZ+VARHDRSZ; memcpy(VARDATA(p),"txt",SZ); Datum dt[1]; dt[0] = CStringGetDatum(p); ret = SPI_execute_plan(plan,dt,... pfree(p); CStringGetDatum uje tut ne nujno. Mojno srazu vmesto dt podstavit' (Datum *)p. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 19:40 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=296&tid=2005396]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 289ms |

| 0 / 0 |
