CPA-Мастер
Блог о заработке на партнёрских программах в CPA-сетях

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

Прошлым летом я допинал бакалавра в Бизнес-информатике и в октябре начал магистратуру. На работе я использую систему управления базами данных от 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!

Leave a comment

Your email address will not be published.

*