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