sql生成唯一的表/视图名称

时间:2010-06-08 23:02:38

标签: sql postgresql

我想创建一些疯狂的强大代码。我想将查询作为字符串,创建临时视图/表来存储结果,使用它,然后删除表。我想使用保证在数据库中不存在的名称。是否有SQL命令来生成唯一的表名?如果这是特定于实现的,我正在使用postgresql。

3 个答案:

答案 0 :(得分:4)

您可以使用临时表。临时表对其他连接不可见。如果存在与临时表同名的永久表,则永久表对当前连接不可见。

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

请参阅PostgreSQL manual page

答案 1 :(得分:2)

我不知道这样做的SQL命令,但你可以生成一种类似于生成临时文件名:放入日期,一些随机数,进程ID,用户的生日:$table_name = join("_", "temp", $$, rand()*0x1000, time)

在我使用过的所有SQL数据库中,每个会话都有自己的临时表命名空间。所以你可以创建一个名为“foo”的临时表,而不用担心它与另一个执行相同操作的线程发生冲突(在不同的连接上!)。在Oracle中,这是一个“LOCAL临时表” - 而所有会话都可以看到“GLOBAL临时表”:但只有它的模式,而不是它的数据。在MSSQL中,表名在内部被标记为不同,但约束名称不是(不是SQL Server 2000)。

答案 2 :(得分:0)

我不太了解postgres,但你能做到(原谅伪代码):

SET @name = GetBigRandomNumber();

WHILE TableExists(@name)
BEGIN
    SET @name = GetBigRandomNumber();
END