在Oracle中是否存在SQL Server的IF OBJECT_ID (N'tempdb..#tmp') IS NOT NULL DROP TABLE #tmp;
?
我想创建一个不指定列名,列详细信息等的本地临时表,插入任何查询结果,并在重新运行整个事务时删除它。
不需要检查表是否存在。使用EXECUTE IMMEDITATE
并尝试删除表,如果它不存在,则捕获异常:
DECLARE
does_not_exist EXCEPTION;
PRAGMA EXCEPTION_INIT(does_not_exist, -942);
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE tmp';
DBMS_OUTPUT.PUT_LINE('The table was dropped.');
EXCEPTION
WHEN does_not_exist THEN
DBMS_OUTPUT.PUT_LINE('The table did not exist.');
END;
/
然而,如果你想要一个私有临时表,当事务完成时自动删除,那么:
CREATE PRIVATE TEMPORARY TABLE ora$ptt_temp AS
SELECT * FROM tmp;
然后当你COMMIT
时,表被自动删除(你可以在下一个事务中重新创建它)。
小提琴