我来自SQL Server环境,您可以使用@table声明临时表,但正如我所读,您无法在oracle中执行此操作。
我想从表中获取500.000硬编码id的值,但由于IN子句的限制为1000,我需要找到另一种方法。是创建临时表并插入硬编码值然后加入包含我需要的值的另一个表的最佳方法吗?
我的客户端(toad)已将autocommit设置为off并且我不想提交任何内容,我希望它是基于会话的,因此当我关闭数据库客户端时,我希望临时表确实消失。代码是否在oracle中以正确的方式进行?
CREATE GLOBAL TEMPORARY TABLE Test(HardcodedId number(10))
ON COMMIT DELETE ROWS;
我也尝试使用内连接,并在连接中选择dual的硬编码值,但这会为每个值创建一个列,并且我无法使用引用加入。是否可以将所有值插入双列中的单个列中?
答案 0 :(得分:2)
你可以使用这样的东西(500 union all)
select * from (
select '1' from dual
union all
select '2' from dual
...) q
然后您可以将其与其他表格结合使用。
答案 1 :(得分:1)
根据您的情况,我会使用GTT(全球临时表) - 您已经通过外观研究过了。
GTT的优势在于它是一个永久对象(因此无需不断创建和删除它),并且“存储”在其中的数据是基于会话的。