AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 255488
Accepted
vikrant rana
vikrant rana
Asked: 2019-12-13 06:32:41 +0800 CST2019-12-13 06:32:41 +0800 CST 2019-12-13 06:32:41 +0800 CST

从 Oracle 过程中的另一个表创建表

  • 772

我有一个 SQL Server 存储过程,其中我正在使用另一个表创建一个表。

Select Distinct 
 col1
,col2
,col3
,col4
into table_2 
from table_1;

上面的语句将使用选定的列列表创建一个新表作为“table_2”。

我尝试将上述查询转换为 Oracle 语法:

Create table table_2 as 
select
 col1
,col2
,col3
,col4
from table_1;

当我在编辑器中运行它时,它可以正常工作。但是,当我尝试在 Oracle 过程中使用它时,同样的语句给了我错误。

我已经浏览了一些链接,其中说需要创建一些临时变量或存储或循环来执行相同的任务。

我现在很困惑,不知道如何将这个简单的语句转换为有效的 Oracle 语法。

oracle
  • 1 1 个回答
  • 5394 Views

1 个回答

  • Voted
  1. Best Answer
    Justin Cave
    2019-12-13T06:40:42+08:002019-12-13T06:40:42+08:00

    如果要在存储过程中创建表(或执行任何其他 DDL),则需要使用动态 SQL

    EXECUTE IMMEDIATE 'create table table_2 as select col1, col2, col3, col4 from table_1';
    

    但是,如果您动态创建表,那么每次您想要随后查询该表时,您还需要使用动态 SQL。这通常会使您的代码更难构建和测试。而且您将无法让两个会话同时运行该过程,因为它们的create table语句会相互冲突。

    退一步说,在 SQL Server 中,在过程中创建本地临时表是很常见的。在 Oracle 中这样做非常非常罕见。像这样直接尝试将逻辑从 SQL Server 移植到 Oracle(反之亦然)几乎没有意义。如果这样做,您会发现 Oracle 在运行 SQL Server 代码方面很糟糕(而 SQL Server 在运行 Oracle 代码方面很糟糕)。您通常希望从 SQL Server 中获取逻辑并找出在 Oracle 中实现该逻辑的最佳方法。

    Oracle 确实有全局临时表,其中表定义是全局的,但数据对于您的会话(或事务)是本地的。潜在地,你想做

    create temporary table table_2 (
      col1 number, 
      col2 number,
      col3 varchar2(10),
      col4 date
    );
    

    然后在存储过程中插入该表,而不是尝试动态创建表。

    • 4

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve