2014-01-22 3 views
0

Я новичок в oracle. У меня есть требование, когда мне нужно вставить значения какой-либо таблицы во временную таблицу. Например, в MSSQL я использовал запрос, как показано ниже.Эквивалентная инструкция SQL Server SELECT INTO в Oracle

Примечание: может быть намного сложнее выбрать результат запроса, вставленный в таблицу temp. то есть фактическое значение в приведенном ниже примере может быть любым сложным запросом. Здесь я только что упомянул простой пример.

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: привязать переменные, которые не разрешены для операций определения данных. Как известно, я не могу выполнять привязку данных для создания таблицы, создавать вид и т. Д.

Что еще я могу сделать? Я не могу создать временную таблицу раньше. Потому что я не буду знать описания всех столбцов таблицы temp. Незлая помощь. Заранее спасибо!

+2

Почему ты нужна временная таблица? –

+1

Я согласен с Фрэнком: в Oracle вам обычно не нужны временные таблицы так, как вы это делаете в SQL Server (вы можете, например, использовать CTE) –

+0

У меня уже есть логика создания временной таблицы в существующей структуре продукта. Меня попросили выполнить привязку данных. Для обоих оракулов и MSSQL. Для MSSQL я достиг, как упоминалось выше. Но, с оракулом, я застрял в точке, о которой я упоминал выше. – Anita

ответ

3

Вы можете сделать это в два этапа. Сначала нужно создать таблицу с 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 ..; 
+0

Спасибо, Крис. Я написал образец кода. Это сработало!! Я попытаюсь интегрировать это с каркасом. – Anita

Смежные вопросы