我如何在Oracle SQL中创建一个临时表,就像在Microsoft SQL Server中一样?
我如何在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中创建一个类似的临时表呢?
在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语句的结果存入某个地方(一个局部变量、集合等)。