Преобразование SQL Server в Oracle - PullRequest
1 голос
/ 17 января 2011

В моем проекте у меня есть база данных на SQL, которая работала нормально. Но теперь мне нужно сделать так, чтобы приложение поддерживало oracle db.

Некоторые ограничения, которые я обнаружил, заключались в том, что в Oracle нет битового поля и имя таблицы не может быть больше 30 символов. Есть ли какие-то другие ограничения, о которых мне нужно помнить?

Любые предложения из прошлого опыта будут полезны.

Ответы [ 4 ]

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

Если я правильно помню из моих предыдущих дней Oracle:

  • в Oracle нет спецификации столбца IDENTITY (вместо нее нужно использовать последовательности)

  • вы не можете просто вернуть SELECT (columns) из хранимой процедуры (вам нужно использовать REF CURSOR)

  • конечно, все хранимые процедуры / функции различаются (Oracle / PL / SQL отличается от T-SQL)

2 голосов
/ 17 января 2011
  • Varchar в базах данных Oracle называется varchar2 ограничен 4000 символы
  • Концепция временных таблиц в Oracle отличается, они имеют глобальную переопределенную структуру
  • по умолчанию порядок сортировки и сравнение строк чувствительны к регистру

Когда вы добавляете столбец к выделенному *

Select * from table_1 order by id;

Вы должны поставить префикс * перед именем таблицы или псевдонимом

Select 
   (row_number() over (order by id)) rn,  
   t.* 
from table_1 t
order by id;

Oracle не различает нуль и '' (пустая строка). Для вставки и обновления вы можете использовать '', но для запроса вы должны использовать null

create table t1 (
    id NUMBER(10),  
    val varchar2(20)
);

Insert into t1 values (1, '');
Insert into t1 values (2, null);
Select * from t1 where stringval = 0; -- correct but empty
Select * from t1 where stringval is null; -- returns both rows
2 голосов
/ 17 января 2011

Аналог SQL ISNULL в Oracle: NVL

select ISNULL(col, 0)...

select NVL(col, 0)...

Вы также будете бороться, если попытаетесь выбрать без from в Oracle. Используйте dual:

select 'Hello' from DUAL

Помните также, что в Oracle существует различие между PL / SQL (процедурный SQL) и чистым SQL. Это два разных языка, которые обычно объединяются.

1 голос
/ 09 апреля 2013

ORACLE не поддерживают предложение TOP .Вместо TOP вы можете использовать ROWNUM .

SQL Server: TOP (Transact-SQL)

SELECT TOP 3 * FROM CUSTOMERS 

ORACLE: Псевдостолбец ROWNUM

SELECT * FROM CUSTOMERS WHERE ROWNUM <= 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...