【问题标题】:Equivalent statement to SQL Server's SELECT INTO in OracleOracle 中 SQL Server SELECT INTO 的等效语句
【发布时间】:2014-01-22 11:27:10
【问题描述】:

我是甲骨文的新手。我有一个要求,我必须将某个表的值插入到临时表中。例如,在 MSSQL 中,我曾经使用如下查询。

注意:可能会有更复杂的选择查询结果,插入到临时表中。即,以下示例中的实际表可以是任何复杂的查询。这里我刚刚提到了一个简单的例子。

SELECT columna, columnb... INTO temptable FROM actualtable where columna=? and columnb=? and ..;

在构建上述选择查询之后,我也通过在 Java 中准备语句来进行数据绑定。

在oracle中我不能像上面那样做,我必须像下面那样使用

create table temptable as select columna, columnb... from actualtable where columna=? and columnb=? and ..;

在此之后我无法进行数据绑定。如果我这样做,我会得到异常 - ORA-01027:数据定义操作不允许绑定变量。众所周知,我无法为创建表、创建视图等进行数据绑定。

我还能做什么?我无法在手头之前创建临时表。因为,我不知道临时表所有列的描述。请帮忙。提前致谢!

【问题讨论】:

  • 为什么需要一个临时表?
  • 我同意 Frank 的观点:在 Oracle 中,您通常不需要像在 SQL Server 中那样需要临时表(例如,您可以使用 CTE)
  • 我在现有的产品框架中已经有了临时表创建逻辑。我被要求为它做数据绑定。对于 oracle 和 MSSQL。对于MSSQL,我实现了上面提到的。但是,对于甲骨文,我被困在了上面,我在上面提到过。

标签: java oracle


【解决方案1】:

您可以分两步完成此操作。首先通过指定一个始终为假的 where 条件来创建 0 行的表:

CREATE TABLE temptable AS SELECT * FROM actualtable WHERE 1 = 0;

然后使用insert into .. select ...,这是一个DML语句,所以可以使用绑定变量:

INSERT INTO temptable SELECT * FROM actualtable WHERE where columna=? and columnb=? and ..;

【讨论】:

  • 谢谢你,克里斯。我写了一个示例代码。有效!!我将尝试将其与框架集成。
猜你喜欢
  • 2023-03-13
  • 2015-10-30
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多