Совместимость Oracle и Sybase для создания таблицы new_table as - PullRequest
0 голосов
/ 17 февраля 2011

Я пытаюсь написать запрос SQL, который должен быть совместим как с базой данных Sybase, так и с Oracle. Запрос выглядит следующим образом:

SELECT * 
  INTO new_table
  FROM other_table

Этот запрос прекрасно работает с базой данных Sybase, но не с базой данных Oracle. Я нашел эквивалент для Oracle:

CREATE table new_table AS
SELECT * 
  FROM other_table

Есть ли способ написать третий запрос, который бы делал то же самое и который мог бы быть выполнен на Sybase и в базе данных Oracle?

Ответы [ 3 ]

3 голосов
/ 17 февраля 2011

Как вы обнаружили, Oracle поддерживает INTO, но не использует его, как Sybase / SQL Server. Аналогично, Sybase не поддерживает расширение Oracle для синтаксиса CREATE TABLE.

Самым надежным средством создания таблицы и импорта данных между системами является использование двух операторов:

CREATE TABLE new_table (
  ...columns...
)

INSERT INTO new_table
SELECT * 
  FROM OLD_TABLE

Даже в этом случае синтаксис отличается, поскольку Oracle требует, чтобы каждый оператор был разделен точкой с запятой, а TSQL - нет.

Создание таблицы и импорт всех данных из другой таблицы - это красный флаг для меня - это не то, что вы бы делали в хранимой процедуре для производственной системы. TSQL и PLSQL сильно отличаются друг от друга, поэтому я ожидаю, что отдельные сценарии для изменений DML.

0 голосов
/ 26 апреля 2013

Это возможно.

SELECT * INTO new_table FROM existing_table;

Спасибо

0 голосов
/ 17 февраля 2011

Нет запроса, который бы делал то, что вы хотите.Эти среды очень разные.

...