2013-05-22 4 views
1

Как удалить временные таблицы в процедурах для того же сеанса.Падение временных таблиц за один сеанс

Потому что я столкнулся с проблемой относительно временных таблиц в Postgres Sql. Если две процедуры:

A(), имеющие временную таблицу сказать, темп (номер, имя) В(), имеющий временную таблицу скажем темп (ID, имя, адрес) затем, если процедура А называется первым и после что процедура B вызывается, то временная таблица остается со структурой, то есть temp (id, name), определенной в процедуре A, и наоборот, а «адрес» столбца, как определено в процедуре B, не найден.

+0

Если вы вызываете процедуры в разных транзакциях, вы можете использовать временные таблицы уровня transectiona. –

ответ

0

Таблицы Temp являются сеансами. Значение одного и того же сеанса может видеть это через вызовы процедур и вызовы SQL. В принципе, временная таблица является глобальной для вашей сессии.

Так что ваши варианты в этом предположении А вызывает Б:

  1. Вызов процедуры А и создать временную таблицу в A и делать то, что вы хотите с ним. В конце процедуры A снимите временную таблицу. Вызовите B из A, теперь вы можете создать временную таблицу с тем же именем внутри B и использовать ее. Как хорошая привычка, явным образом удаляю временную таблицу, как только вы это сделаете.

  2. В противном случае используйте два разных имени для таблицы temp.

http://www.postgresql.org/docs/9.2/static/sql-createtable.html «ВРЕМЕННЫЙ или TEMP Если указано, то таблица создается в качестве временной таблицы. Временные таблицы автоматически удаляются в конце сеанса, или, возможно, в конце текущей транзакции (см ON COMMIT ниже). Существующие постоянные таблицы с тем же именем не отображаются текущему сеансу, пока существует временная таблица, если только они не ссылаются на имена, соответствующие критериям схемы. Любые индексы, созданные во временной таблице, также автоматически временны ».

1

PostgreSQL не поддерживает временные таблицы уровня процедуры, поэтому вы просто не можете этого сделать.

Использование временных таблиц в Pg немного отличается от других db. В вашем случае вы должны использовать разные имена.

+0

Если я использую on commit drop, то он работает или нет или есть какая-либо другая альтернатива. – ripunj2408813

+0

, если вы никогда не будете называть A от B или B от A, тогда он может работать, но обычно это плохая идея. –

+0

Да и процедуры А и В независимы друг от друга, почему эта идея плоха? – ripunj2408813

Смежные вопросы