sql генерирует уникальное имя таблицы / представления - PullRequest
3 голосов
/ 09 июня 2010

Я хочу создать какой-нибудь безумный надежный код.Я хочу принять запрос в виде строки, создать временное представление / таблицу для хранения результатов, использовать его, а затем удалить таблицу.Я хочу использовать имя, которое гарантированно не существует в базе данных.Существует ли команда SQL для создания уникального имени таблицы?Я использую postgresql, если это зависит от реализации.

Ответы [ 3 ]

4 голосов
/ 09 июня 2010

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

CREATE TEMPORARY TABLE table_name  
(  
 column_name1 data_type(length) constraints,  
 column_name2 data_type(length) constraints,  
 ...

См. Страницу руководства PostgreSQL .

2 голосов
/ 09 июня 2010

Я не знаю команду SQL для этого, но вы могли бы просто сгенерировать один вид, например, создание временного имени файла: введите дату, некоторое случайное число, идентификатор процесса, день рождения пользователя: $table_name = join("_", "temp", $$, rand()*0x1000, time)

Во всех базах данных SQL, которые я использовал, каждый сеанс имеет свое собственное пространство имен временных таблиц.Таким образом, вы можете просто создать временную таблицу с именем "foo" и не беспокоиться о том, что она конфликтует с другим потоком, который делает то же самое (с другим подключением!).В Oracle это, в частности, «ЛОКАЛЬНАЯ временная таблица», тогда как «ГЛОБАЛЬНАЯ временная таблица» видна всеми сеансами, но только ее схемой, а не данными.В MSSQL имена таблиц внутренне заключены, чтобы быть различимыми, а имена ограничений - нет (не относятся к SQL Server 2000).

0 голосов
/ 09 июня 2010

Я не очень хорошо знаю postgres, но не могли бы вы (извините за псевдокод):

SET @name = GetBigRandomNumber();

WHILE TableExists(@name)
BEGIN
    SET @name = GetBigRandomNumber();
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...