Различия между T-SQL и PL/SQL

2 минуты на чтение

Прошлым летом я допинал бакалавра в Бизнес-информатике и в октябре начал магистратуру. На работе я использую систему управления базами данных от Oracle, на курсе Data Warehouse (хранилище данных) сейчас я работаю с SQL Server. В этом посту я опишу несколько разлиичий между оракловским PL/SQL и мелкософтоским T-SQL.

Все переменные в Oracle объявляются в самом начале в разделе declare, в SQL Server это ключевое слово нужно прописывать перед каждой переменной и переменная может находиться в любой части подпрограммы. В T-SQL переменную можно узнать по собаке (@) перед названием.

Команда select работает по-другому. Чтобы выбрать текущую дату, не нужно указывать дополнительные таблицы. (Я, например, никогда не понимал, что такое таблица dual в Oracle.)

PL/SQL: select sysdate from dual
T-SQL: select getdate()

При отлаживании кода вместо процедуры put_line пакета dbms_output в T-SQL можно использовать простой select. В PL/SQL строка заканчивается точкой с запятой, в T-SQL у меня сложилось такое впечатление, что точку с запятой можно вообще не использовать.

PL/SQL: dbms_output.put_line('Hello world!');
T-SQL: select 'Hello world!'

Чтобы присвоить переменной значение какого-то атрибута, синтаксис тоже отличается. В Oracle это делается с помощью ключевого слова into, в SQL Server используется знак равенства.

PL/SQL: select column_name into var_name from table
T-SQL: select @var_name = column_name from table

В T-SQL нет пакетов для связки процедур и функций, как в PL/SQL (про них я как-то писал отдельный пост). Можно собирать функции в схему, но это уже другой подход и, например, переменные для всех процедур и функций пакета так уже не объявишь.

Очень важное отличие в том, что в функции T-SQL нельзя выполнять запросы, которые изменяют состояние базы данных (insert, update, delete). Например, представим сценарий, в котором мы хотим добавить запись в базу данных и вернуть идентификационный номер. В T-SQL средствами функций эту проблему решить нельзя, нужна процедура с исходящим парамертом.

В T-SQL нет таких объектов в базе данных, как sequence, которые используются для присваивания значений первичному ключу. В T-SQL объявить колонку автозаполняемой уникальными значениями можно, добавив ключевое слово identity. В Oracle тоже есть identity, но при его использовании будет просто добавлена sequence. Порследовательности так же появились в SQL Server начиная с версии 2012 года, но мне была доступна версия 2010 года.

Понравился пост? Поделись в соцсетях и подписывайся на аккаунты в Twitter и Facebook!
Facebook Vk Ok LinkedIn Telegram Whatsapp

Похожие записи:

Как я писал в прошлом посте (Различия между T-SQL и PL/SQL), в прошлом семестре я проходил курс по хранилищам данных. Изначально я собирался написать больше постов, но времени не было. В черновике уже долгое время лежит несколько постов, но когда я их доделаю и опубликую — не знаю. ...
С начала лета я вплотную работаю с технологиями Oracle, как можно понять и по другим постам, в частности с процедурным расширением языка cтруктурированных запросов PL/SQL. Я решил написать пару записей на эту тему и начинаю с циклов. Сначала рассмотрим простейший вариант цикла FO...
Пакеты PL/SQL являются объектами базы данных (схемы), которые объединяют в себе связанные по смыслу подпрограммы (переменные, курсоры…). В этом посту рассмотрим простейший пример объявления пакета, его реализации и использования. Состоят пакеты из спецификации и тела (body). Сп...