【发布时间】:2016-07-06 12:13:37
【问题描述】:
这个问题很常见,但我面临一个问题,我无法找到答案。 我要做的是,如果表不存在,则创建一个表。 但是在创建表时,我需要从选择查询(这是两个表的 JOIN 的结果)中创建它。 这是针对“ORACLE SQL DEVELOPER”/“PL/SQL”的。
我使用的查询是:
DECLARE
count_matching_tbl BINARY_INTEGER := 0;
BEGIN
SELECT COUNT(*)
INTO count_matching_tbl
FROM dba_tables
WHERE LOWER(table_name) = 'testtable';
IF(count_matching_tbl = 0)
THEN
EXECUTE IMMEDIATE ( ' CREATE TABLE testtable AS (SELECT A.*, B.* from tab1 A JOIN tab2 B ON A.id = B.RID WHERE 1=2)');
END IF;
END;
【问题讨论】:
-
该查询有什么问题?你有错误吗?什么错误?它不做你想做的事吗?它在做什么或做得不对?虽然在运行时创建表通常表明架构不佳,但我的猜测是数据字典中的表名是大写的,而您正在
select中寻找小写的表名。可能还有其他错误,或者可能是拼写错误。 -
@JustinCave:我得到的错误是'没有正确终止。并且由于代码的并行执行,if子句之后的其余语句都在之前执行,因此得到错误:表或视图不存在。
-
PL/SQL 块后缺少
/:stackoverflow.com/a/10207695/330315 -
该代码对我来说很好,在 SQL*Developer 中运行。你是如何执行你的匿名块的?另外,我不明白您所说的并行执行代码是什么意思。这是 PL/SQL。它是程序性的 - 您的命令是串行而不是并行运行的。您的 IF 语句正在正确的时间处理。如果您解释了导致您不相信的原因,这可能对我们所有人都有帮助
标签: oracle plsql oracle-sqldeveloper ddl