我是oracle的新手。我有一个要求,我必须将某些表的值插入临时表。例如,在MSSQL中我曾经使用过类似下面的查询。
注意:可以有更复杂的选择查询结果,插入临时表。即,以下示例中的actualtable可以是任何复杂的查询。我刚才提到了一个简单的例子。
SELECT columna, columnb... INTO temptable FROM actualtable where columna=? and columnb=? and ..;
在构建上面的select查询之后,我正在通过在Java中准备语句来进行数据绑定。
在oracle我不能像上面那样做,我必须使用如下
create table temptable as select columna, columnb... from actualtable where columna=? and columnb=? and ..;
在此之后我无法进行数据绑定。如果我这样做,我得到异常 - ORA-01027:绑定变量不允许进行数据定义操作。因为它已知我不能为create table做数据绑定,创建视图等。
我还能做什么?我手头之前无法创建临时表。因为,我不会知道临时表的所有列的描述。请帮助。提前谢谢!
答案 0 :(得分:3)
您可以分两步完成此操作。首先通过指定始终为false的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 ..;