Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 T-sql vs PL/SQL (разница в синтаксисе)  [new]
Takayavot1
Guest
Доброго времени суток!
Подскажите, пож-та,
Предвидится потребность писать большое кол-во запросов (на Select) в СУБД Oracle.
До этого работала с MS SQL
Есть ли ощутимая разница в синтаксисе?
Интересуют стандартные операции из серии объединения таблиц, группировки, подзапросов.
Функции, наверное, разные, да?
Спасибо!
30 июл 17, 23:52    [20686541]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54791

Takayavot1
Есть ли ощутимая разница в синтаксисе?

PL/SQL это не про select. И таки да, между T-SQL и PL/SQL вообще нет ничего общего.

Posted via ActualForum NNTP Server 1.5

31 июл 17, 00:14    [20686579]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
DirksDR
Member

Откуда: Пермь
Сообщений: 340
Takayavot1,

Как раз select-ы наиболее похожие, вот ХП MSSQL и пакеты Oracle отличаются значительно.
Первым делом освойте функцию to_date Oracle.
С временными таблицами все иначе... геморройнее.
Отлаживать скрипт хуже, переменные есть только в пакетах.
Приспособил конструкцию with
 with
 --       параметры выборки (переменные T-SQL)
prm as (select  to_date('01.01.2017','dd.mm.yyyy') as rep_date  
            ......
             from dual)

,wl as (SELECT *     

FROM       wb, meth
                ,prm
where   1=1
    ...
         and wb.start_time < rep_date    and (wb.end_time >= rep_date or wb.end_time is null)  
         and meth.start_time < rep_date   and  (meth.end_time >= rep_date or meth.end_time is null) 
)

select * from wl

Первый SELECT задает параметры, которые я использую в следующих SELECT-ах, как переменные в T_SQL (rep_date),
а следующие SELECT-ы могут сыграть роль временных таблиц.
31 июл 17, 09:07    [20686842]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Takayavot1
Guest
Dimitry Sibiryakov
PL/SQL это не про select. И таки да, между T-SQL и PL/SQL вообще нет ничего общего.


может неправильно сформулировала вопрос.
Меня интересуют обычные запросы из базы данных, в которых используются операторы Select, From, Where, Join (Left, Right), On, Group by, Having, Order By. Синтаксис для такого рода запросов не изменится?

И вложенные подзапросы типа:

Select a,b,c, price from BD
Where price =
(Select min(price) from BD)

или

Select BD2.price
from
(Select a,b,c,price from BD
Where a=30) as BD2
31 июл 17, 10:59    [20687151]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Takayavot1
Guest
А также наиболее часто используемые функции типа
Between, in, IsNull, String, Datepart, Getdate, и прочие
31 июл 17, 11:06    [20687178]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Alibek B.
Member

Откуда:
Сообщений: 4003
На этом уровне отличия невелики.
31 июл 17, 11:22    [20687267]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 1119
Takayavot1,

все SQL-сервера поддерживают некий стандарт (кажется, сейчас это Core называется). Если используете синтаксис и операторы из него, то можете не беспокоится. А вот хранимки и триггеры - они на процедурном языке, который разный, дан на откуп вендорам.
Правда, можете и на селекте попасть. Если используете какие-то специфические майкрософтовские функции. Да и не только в функциях и операторах дело. Можно и в синтаксисе нарваться на проблему.
31 июл 17, 16:45    [20688984]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Takayavot1
Доброго времени суток!
Подскажите, пож-та,
Предвидится потребность писать большое кол-во запросов (на Select) в СУБД Oracle.
До этого работала с MS SQL
Есть ли ощутимая разница в синтаксисе?
Интересуют стандартные операции из серии объединения таблиц, группировки, подзапросов.
Функции, наверное, разные, да?
Спасибо!

Конкатенация строк не +, а || - реально достанет в процессе
Пустая строка - это NULL! А ещё NULL можно присоединить к строке, и это не станет NULL
ISNULL - это NVL
Давно не следил на развитием оракла, но вроде так и не сделали оператор APPLY
С датами отдельная песня, сказали выше
Про временные таблицы тоже присоединяюсь, придётся помучиться
6 авг 17, 10:28    [20703331]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
mayton
Member

Откуда: loopback
Сообщений: 52996
Takayavot1
А также наиболее часто используемые функции типа
Between, in, IsNull, String, Datepart, Getdate, и прочие

BETWEEN, IN - работают нормально.

IsNull пишется "IS NULL".

String - ... такого скорее всего нет. Надо искать замену.

Вместо GetDate (возможно) надо юзать SYSDATE

Но это все мелочи. Настоящий трешак и режимы транзакций и
Неявное начало пишущей транзакции, мутация таблиц, и как уже говорили безразличие Oracle
к NULL и пустой строке. А также более ограниченный набор типов данных (нету short, int, boolean).
И очень много исторически сложившихся ограничителей (имя схемы и объекта не более 30 символов)
и VARCHAR2 в таблицах не более 4K байтов (для Oracle до 11).
10 авг 17, 00:53    [20712306]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Takayavot1,

одно из отличий обычных запросов то, что UPDATE (и по моему INSERT) не поддерживают JOIN.
Т.е. нельзя через JOIN объединить в одном UPDATE запросе две таблицы, чтобы, например, скопировать данные одной в другую.
10 авг 17, 07:54    [20712457]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Yo.!
Guest
Yuri Abele
одно из отличий обычных запросов то, что UPDATE (и по моему INSERT) не поддерживают JOIN.
Т.е. нельзя через JOIN объединить в одном UPDATE запросе две таблицы, чтобы, например, скопировать данные одной в другую.

глупости. единственно майкрософту пофиг на девелоперов и если джоин генерит несколько разных записей то мсскл тих бросает монетку и выбирает рандоном одну из записей, гарантируя начная секаса.
в оракле реализованна дополнительная проверка, нужно констрейтами убедить субд что такой лажи не произойдет.
10 авг 17, 08:53    [20712529]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Yo.!,

0. Давайте без holly wars?! ("майкрософту пофиг на девелоперов" и т.п.)
1. Неправильное использование инструмента не делает инструмент плохим
2. Сроки выбираются не случайно, а берется первая найденная. Об этом нужно просто знать, и соответственно строить запросы:

IF OBJECT_ID('T_SOURCE') IS NOT NULL
  DROP TABLE T_SOURCE;
IF OBJECT_ID('T_TARGET') IS NOT NULL
  DROP TABLE T_TARGET;

CREATE TABLE T_SOURCE (ID INT, Value NVARCHAR(MAX), ReverceRank INT);
INSERT INTO T_SOURCE VALUES
(1, 'AAA', 1),
(2, 'BBB', 2),
(2, 'CCC', 1),
(3, 'DDD', 3),
(3, 'EEE', 2),
(3, 'FFF', 1);
SELECT * FROM T_SOURCE;

CREATE TABLE T_TARGET (ID INT, Value NVARCHAR(MAX));
INSERT INTO T_TARGET VALUES
(1, 'GGG'),
(2, 'HHH'),
(3, 'III');
SELECT * FROM T_TARGET;

UPDATE TRG
SET Value = SRC.Value
FROM T_TARGET TRG INNER JOIN T_SOURCE SRC ON TRG.ID = SRC.ID;
SELECT * FROM T_TARGET;

UPDATE TRG
SET Value = SRC.Value
FROM T_TARGET TRG INNER JOIN T_SOURCE SRC ON TRG.ID = SRC.ID
WHERE SRC.ReverceRank = 1;
SELECT * FROM T_TARGET;


К сообщению приложен файл. Размер - 11Kb
10 авг 17, 09:36    [20712617]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Yo.!
Guest
Yuri Abele
0. Давайте без holly wars?! ("майкрософту пофиг на девелоперов" и т.п.)
1. Неправильное использование инструмента не делает инструмент плохим
2. Сроки выбираются не случайно, а берется первая найденная. Об этом нужно просто знать, и соответственно строить запросы:

по мне если в инструменте не доделаны базовые проверки это делает плохим инструмент.
язык SQL декларативный, там нет понятия первая, если явно не указана сортировка. "первая" на основном сервере может быть не первой на стендбай сервере, с веселыми и трудно находимыми результами. подбрасывание монетки делает фиговым инструмент.
10 авг 17, 10:24    [20712795]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Yo.!,

согласен. Именно поэтому и нужно, я цитирую, "соответственно строить запросы".
В моем скрипте пример с ReverseRank. Он не обязан быть физическим полем таблицы, а приJOINнная таблица не обязана быть таблицей, а может быть и именованным подзапросом (или даже VIEW)
10 авг 17, 10:30    [20712805]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67463
Блог
mayton
Настоящий трешак ...


Как правило, с этих слов начинается описание либо незначимых мелочей, либо плюсов Оракла по сравнению с альтернативами :)
10 авг 17, 11:13    [20712916]     Ответить | Цитировать Сообщить модератору
 Re: T-sql vs PL/SQL (разница в синтаксисе)  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
softwarer
С этих слов начинается описание либо не значимых мелочей... (остальное не значимо)

mayton
Настоящий трешак ...

Настоящий трешак начинается, когда сверху спускают директиву перейти MS SQL на Oracle. Вменяемые сразу увольняются. Оставшиеся пишут на форум
Takayavot1
Предвидится потребность писать большое кол-во запросов (на Select) в СУБД Oracle.
20 ноя 17, 19:05    [20970135]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить