Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временные таблицы / 4 сообщений из 4, страница 1 из 1
31.01.2005, 23:40
    #32893524
джанкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временные таблицы
В процедуре используются временные таблицы
при первом запуске всё нормально работает
при последующих - ошибка
если закрыть сессию и открыть её заново
опять первый запуск - нормально
далее опять ошибка


создаётся таблица внутри процедуры: CREATE TEMPORARY TABLE no_enough_qty (goods_id INT4) ON COMMIT DROP;
после выполнения всех манипуляций с ней она удаляется: DROP TABLE no_enough_qty;

вот сопсна как всё происходит:

storage_db=# SELECT __proc_add_operation_outgoing(2,4,1,ARRAY[10,11],ARRAY[1,1],ARRAY[220,240],ARRAY[-1,-1]);
__proc_add_operation_outgoing
-------------------------------
{0}
(1 запись)

storage_db=# SELECT __proc_add_operation_outgoing(2,4,1,ARRAY[10,11],ARRAY[1,1],ARRAY[220,240],ARRAY[-1,-1]);
ERROR: relation with OID 27112 does not exist
КОНТЕКСТ: SQL statement "INSERT INTO no_enough_qty (goods_id) VALUES ( $1 [ $2 ])"
PL/pgSQL function "__proc_add_operation_outgoing" line 38 at SQL statement
storage_db=#


пробовал и так:
BEGIN;
SELECT __proc_add_operation_outgoing(2,4,1,ARRAY[10,11],ARRAY[1,1],ARRAY[220,240],ARRAY[-1,-1]);
COMMIT;

результат такойже
подскажите плиз как побороть это
...
Рейтинг: 0 / 0
01.02.2005, 00:55
    #32893568
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временные таблицы
Работать с временными таблицами надо через EXECUTE. Процедура при первом выполнении "компилируется" и при следующем вызове происходит обращение к несуществующему объекту.
...
Рейтинг: 0 / 0
01.02.2005, 09:52
    #32893779
джанкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временные таблицы
ага
сенкс
уже разобрался

))
...
Рейтинг: 0 / 0
01.02.2005, 10:22
    #32893868
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временные таблицы
Sad SpiritРаботать с временными таблицами надо через EXECUTE. Процедура при первом выполнении "компилируется" и при следующем вызове происходит обращение к несуществующему объекту.

у меня такое было не только с времянками, но и с первичным ключом. (в процедуре было DROP PKey ..... CREATE ... PKey. Криэйт сразу пришлось вешать на EXECUTE (процедура не хотела даже компилироваться как SQL проца - ругалась на невозможность создания второго п-кея - пришлось перейти на plpgSQL и EXECUTE). А DROP пришлось повесить на EXECUTE после первого запуска (PKey тоже был распознан как OID, который после первого пуска изменился). Другие констрайнты (в частности ф-кеи и индексы) передаются (в откомпиленную процедуру) по именам.



ЗЫ : Кстати, если во времянке не создаете индексов и не пересчитываете ее кусочно и многократно, проще вместо времянки вертать из [STABLE] функции SETOF , и вязаться на него как на таблицу.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временные таблицы / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]