我如何在Oracle SQL中创建一个临时表,就像在Microsoft SQL Server中一样?

6 浏览
0 Comments

我如何在Oracle SQL中创建一个临时表,就像在Microsoft SQL Server中一样?

我在网上看到了很多例子,但我仍然不确定如何创建临时表。以下是我在SQL Server中创建临时表的示例:

如果 object_id('tempdb.dbo.#processid') 不为空则清空表 #processid
如果 object_id('tempdb.dbo.#processid') 不为空则删除表 #processid
选择 distinct
    lot_id,
    ssr.run_oid,
    process_id
插入临时表 #processid
从 sigma.sigma_run ssr
内连接 sigma.sigma_lot ssl on ssl.run_oid = ssr.run_oid

我应该如何在Oracle SQL中创建一个类似的临时表呢?

0
0 Comments

在Oracle中,我们通常不会创建临时表。基本上,这取决于你想要做什么。如果你必须这样做,你可以使用以下代码创建一个全局临时表:

create global temporary table temp_table as
select distinct
    lot_id,
    ssr.run_oid,
    process_id
from sigma.sigma_run ssr
inner join sigma.sigma_lot ssl on ssl.run_oid = ssr.run_oid;

但是,再次强调,你应该解释一下幕后情况,这样我们才能建议下一步该做什么。需要注意的是,临时表中的数据只对你可见;其他用户看不到任何内容。如果你想共享通过该查询收集的数据,请创建一个“普通”表(即从该语句中删除global temporary)。此外,你还可以创建一个视图(即存储的查询),然后从中获取数据。

SQL Server也不使用临时表,只有一些懒惰的开发人员才会使用。带有任意字段和大小、没有键或索引的表总是一个糟糕的主意。

谢谢你的回复!我需要创建一个临时表,因为我的同事希望我将其与我在SQL Server中编写的另一段代码连接到Tableau中。这是他建议给我的。

谢谢,我修复了。噢,我增加了一些信息-请看一下。

SQL Server的临时表可以创建索引和约束。问题使用了SELECT INTO,所以该表将不带索引和约束开始。即使使用INSERT INTO,该表也是在tempdb中创建的,这是一个非常繁忙的数据库。

我不是说答案是错的。使用临时表作为支撑是错误的。实际上,Oracle文档使用的一个例子(航空公司预订)非常糟糕和令人不快 - 我在一家在线旅行社工作,想到每天有数百万个临时表......绝对是不可取的;临时表存在并不意味着它们应该被(滥)用。我之前的评论与我自己关于MS SQL Server的句子有关;我不使用它,所以对它的“了解”(哈哈)主要是通过阅读各种论坛讨论来获取的;这就是我了解到“MS SQL Server”和“临时表”之间紧密联系的地方。这就是为什么我决定删除那行的原因。再次感谢!

我尝试了你的方法,但我觉得它说得不对。这是由什么引起的?

啊,抱歉,刚才的代码有问题,把INTO删掉(参见修正后的代码)。在这个上下文中,INTO是不合适的(我只是复制/粘贴了你发布的代码,没有正确检查它)。INTO子句在PL/SQL中使用,因为在Oracle中,你必须将SELECT语句的结果存入某个地方(一个局部变量、集合等)。

0