Вопрос о взаимодействии Oracle Global Temporary Table / PHP - PullRequest
0 голосов
/ 23 сентября 2008

Я никогда не использовал глобальные временные таблицы, однако у меня есть несколько вопросов, как они будут работать в среде php.

Как происходит обмен данными: Предполагается постоянное подключение к оракулу через php с использованием oci8. Связаны ли данные с идентификатором базы данных? это сделано на основе Apache httpd демонов? Или каждый отдельный запрос уникален?

Когда данные для сеанса очищаются из глобальной временной таблицы? Я предполагаю (или, скорее, надеюсь), что это сделано, когда скрипт php завершается. В качестве альтернативы, если нет, я предполагаю, что мне нужно удалить его перед завершением скрипта.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2008

Глобальная временная таблица - это просто логическое определение структуры таблицы (имя, имена столбцов, типы данных столбцов и т. Д.). Когда сеанс ссылается на него путем вставки данных, во временном табличном пространстве создается сегмент данных для хранения только данных этого сеанса. Поэтому разные сеансы могут ссылаться на одно и то же определение логической таблицы, поскольку каждый из них имеет свой собственный выделенный сегмент данных, который можно легко удалить при фиксации или когда сеанс отключается, не затрагивая другие сеансы.

Очистка данных в GTT может быть либо при фиксации, либо по окончании сеанса, в зависимости от параметра, с которым они были созданы. В любом случае вам не нужно самостоятельно выполнять очистку перед отключением.

Полезной альтернативой GTT является предложение факторинга подзапроса («WITH»), в котором можно создать несколько отношений, которые могут ссылаться на ранее объявленные в этом операторе SQL. Они могут быть материализованы как сегмент данных во временном табличном пространстве либо автоматически Oracle, когда они превышают определенное использование памяти, либо вручную, используя подсказку оптимизатора MATERIALIZE.

1 голос
/ 23 сентября 2008

Если я правильно помню, данные в глобальных временных таблицах доступны только из одного активного сеанса и только для этого активного сеанса (я имею в виду сеанс = соединение). Таким образом, вы можете видеть только данные, которые были вставлены ранее в активном сеансе. Поэтому я верю, что эти данные очищаются после закрытия сессии. Независимо от того, какой язык вы используете.

По крайней мере, я так думаю. : D

Как написано здесь: http://www.oracle -base.com / статьи / 8i / TemporaryTables.php

Данные в глобальной временной таблице являются частными, так что данные, вставленные сеансом, могут быть доступны только этому сеансу.

Данные во временных таблицах автоматически удаляются в конце сеанса базы данных, даже если они ненормально заканчиваются.

Извините за мой плохой английский.

...