我尝试在PL / SQL Developer中运行以下代码段,但最后一条命令抛出 ORA-00942:表或视图不存在错误消息。
DECLARE
sqlCommandABC varchar2(30000) := 'create table ABC_TMP
tablespace &TBS_NORMAL_TABLES initrans 32 AS (SELECT ABC_ID from ABC where ID <=400000)';
BEGIN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE ABC_TMP';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
EXECUTE IMMEDIATE sqlCommandABC;
COMMIT;
END;
/
DECLARE
sqlCommandDEF varchar2(30000) := 'create table DEF_TMP
tablespace &TBS_NORMAL_TABLES initrans 32 AS (SELECT DEF_ID from DEF where ID <=15000)';
BEGIN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE DEF_TMP';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
EXECUTE IMMEDIATE sqlCommandDEF;
COMMIT;
END;
/
DECLARE
sqlCommandXYZ varchar2(30000) := 'create table XYZ_TMP
tablespace &TBS_NORMAL_TABLES initrans 32 AS (select ID from XYZ where ABC_1 in (SELECT ABC_ID from ABC_TMP) or DEF_1 in (SELECT DEF_ID from DEF_TMP))';
BEGIN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE XYZ_TMP';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
EXECUTE IMMEDIATE sqlCommandXYZ;
COMMIT;
END;
/
我想通过从原始表中选择数据来创建两个临时表,并根据逻辑设置某些条件。
在创建 ABC_TMP 和 DEF_TMP 之后,我需要在选择第三个临时表的条件下使用它们。
XYZ_TMP 表具有两个条件,一个条件用于ABC_TMP记录,另一个条件用于DEF_TMP记录。 第三个create table子句引发错误。
我知道我可以在这里使用原始选择,但是这些选择非常复杂且成本较高,因此,如果可能的话,我想使用过滤后的表格。我也知道,如果在创建前两个表之后打开一个新会话,它将起作用,但是我想在一个脚本中执行这些会话。
答案 0 :(得分:0)
根据提供的信息,我了解到DEF_TMP和ABC_TMP已成功创建并因此可用。在这种情况下,这里有两种可能性。