【问题标题】:Oracle DB Create Table Only When Data ExistsOracle DB 仅在数据存在时创建表
【发布时间】:2020-11-02 10:51:13
【问题描述】:

当我尝试使用以下语句创建表时 创建表 为 SELECT * FROM WHERE ;

我想了解有什么办法,当带下划线的 select 语句不返回任何行时,oracle 会忽略表的创建。

即如果最终用户的意图是避免不必要的空白表。 Oracle 是否提供了任何方式/功能。

【问题讨论】:

  • 在我看来,有一个更大的问题需要解决。谁会像这样在不知道决定他们是否想要/需要创建新表的条件的情况下动态创建表?

标签: oracle create-table


【解决方案1】:
CREATE TABLE <TABLE_NAME_1> 
AS 
SELECT * FROM <TABLE_NAME_2> WHERE <CONDITION_1> ;

即使表中没有数据,也会创建有结构的表。

CTAS一旦被执行,无论如何都会创建表。

如果您只想在所选表中存在数据时创建表,则必须使用 PL/SQL 块,如下所示:

DECLARE
    CNT NUMBER := 0;
BEGIN
    SELECT COUNT(1)
      INTO CNT
      FROM <TABLE_NAME_2>;

    IF CNT > 0 THEN
        EXECUTE IMMEDIATE 'CREATE TABLE <TABLE_NAME_1> AS 
                           SELECT * FROM <TABLE_NAME_2> WHERE <CONDITION_1>';
    END IF;
END;
/

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多