SQL Комментарии
Комментарии используются для объяснения разделов инструкций SQL или для предотвращения выполнения инструкций SQL.
Примечание: Примеры из этой главы не будут работать в Firefox и Microsoft Edge!
Комментарии не поддерживаются в базах данных Microsoft Access. Firefox и Microsoft Edge используют базу данных Microsoft Access в наших примерах.
Однострочные комментарии
Однострочные комментарии начинаются с —.
Любой текст между — и концом строки будет проигнорирован (не будет выполнен).
В следующем примере в качестве объяснения используется однострочный комментарий:
Пример
—Выбрать все:
SELECT * FROM Customers;
В следующем примере используется однострочный комментарий для игнорирования конца строки:
Пример
SELECT * FROM Customers — WHERE City=’Berlin’;
В следующем примере используется однострочный комментарий для игнорирования инструкции:
Пример
—SELECT * FROM Customers;
SELECT * FROM Products;
Многострочные комментарии
Многострочные комментарии начинаются с /* и заканчиваются*/.
Любой текст между /* и */ будет проигнорирован.
В следующем примере в качестве объяснения используется многострочный комментарий:
Пример
/*Выберите все столбцы
из всех записей
в таблице клиенты:*/
SELECT * FROM Customers;
В следующем примере используется многострочный комментарий для игнорирования многих инструкций:
Пример
/*SELECT * FROM Customers;
SELECT * FROM Products;
SELECT * FROM Orders;
SELECT * FROM Categories;*/
SELECT * FROM Suppliers;
Чтобы проигнорировать только часть утверждения, также используйте / * * / комментарий.
В следующем примере комментарий используется для игнорирования части строки:
Пример
SELECT CustomerName, /*City,*/ Country FROM Customers;
В следующем примере комментарий используется для игнорирования части инструкции:
Пример
SELECT * FROM Customers WHERE (CustomerName LIKE ‘L%’
OR CustomerName LIKE ‘R%’ /*OR CustomerName LIKE ‘S%’
OR CustomerName LIKE ‘T%’*/ OR CustomerName LIKE ‘W%’)
AND Country=’USA’
ORDER BY CustomerName;
Мы только что запустили
SchoolsW3 видео
курс сегодня!
Сообщить об ошибке
Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:
Ваше предложение:
Спасибо Вам за то, что помогаете!
Ваше сообщение было отправлено в SchoolsW3.
Schoolsw3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.
Как сделать комментарий в sql
COMMENT — задать или изменить комментарий объекта
Синтаксис
COMMENT ON < ACCESS METHODимя_объекта| AGGREGATEимя_агрегатной_функции(сигнатура_агр_функции) | CAST (исходный_типASцелевой_тип) | COLLATIONимя_объекта| COLUMNимя_отношения.имя_столбца| CONSTRAINTимя_ограниченияONимя_таблицы| CONSTRAINTимя_ограниченияON DOMAINимя_домена| CONVERSIONимя_объекта| DATABASEимя_объекта| DOMAINимя_объекта| EXTENSIONимя_объекта| EVENT TRIGGERимя_объекта| FOREIGN DATA WRAPPERимя_объекта| FOREIGN TABLEимя_объекта| FUNCTIONимя_функции( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, . ] ] ) | INDEXимя_объекта| LARGE OBJECToid_большого_объекта| MATERIALIZED VIEWимя_объекта| OPERATORимя_оператора(тип_слева,тип_справа) | OPERATOR CLASSимя_объектаUSINGиндексный_метод| OPERATOR FAMILYимя_объектаUSINGиндексный_метод| POLICYимя_политикиONимя_таблицы| [ PROCEDURAL ] LANGUAGEимя_объекта| ROLEимя_объекта| RULEимя_правилаONимя_таблицы| SCHEMAимя_объекта| SEQUENCEимя_объекта| SERVERимя_объекта| TABLEимя_объекта| TABLESPACEимя_объекта| TEXT SEARCH CONFIGURATIONимя_объекта| TEXT SEARCH DICTIONARYимя_объекта| TEXT SEARCH PARSERимя_объекта| TEXT SEARCH TEMPLATEимя_объекта| TRANSFORM FORимя_типаLANGUAGEимя_языка| TRIGGERимя_триггераONимя_таблицы| TYPEимя_объекта| VIEWимя_объекта> IS 'текст' Здесьсигнатура_агр_функции: * | [режим_аргумента] [имя_аргумента]тип_аргумента[ , . ] | [ [режим_аргумента] [имя_аргумента]тип_аргумента[ , . ] ] ORDER BY [режим_аргумента] [имя_аргумента]тип_аргумента[ , . ]
Описание
COMMENT сохраняет комментарий об объекте базы данных.
Для каждого объекта сохраняется только одна строка, так что для изменения комментария нужно просто выполнить COMMENT ещё раз для того же объекта. Чтобы удалить комментарий, вместо текстовой строки укажите NULL . При удалении объектов комментарии удаляются автоматически.
Для большинства типов объектов комментарий может установить только владелец объекта. Но так как роли не имеют владельцев, COMMENT ON ROLE для ролей суперпользователей разрешено выполнять только суперпользователям, а для обычных ролей — тем, кто имеет право CREATEROLE . Так же не имеют владельцев и методы доступа; чтобы добавить комментарий для метода доступа, нужно быть суперпользователем. Разумеется, суперпользователи могут задавать комментарии для любых объектов.
Просмотреть комментарии можно в psql , используя семейство команд \d . Имеется возможность получать комментарии и в других пользовательских интерфейсах, используя те же встроенные функции, что использует psql , а именно obj_description , col_description и shobj_description (см. Таблицу 9.67).
Параметры
имя_объекта
имя_отношения . имя_столбца
имя_агрегатной_функции
имя_ограничения
имя_функции
имя_оператора
имя_политики
имя_правила
имя_триггера
Имя объекта, для которого задаётся комментарий. Имена таблиц, агрегатных функций, правил сортировки, перекодировок, доменов, сторонних таблиц, функций, индексов, операторов, классов и семейств операторов, последовательностей, объектов текстового поиска, типов и представлений могут быть дополнены именем схемы. При определении комментария для столбца, имя_отношения должно ссылаться на таблицу, представление, составной тип или стороннюю таблицу. имя_таблицы
имя_домена
При создании комментария для ограничения, триггера, правила или политики эти параметры задают имя таблицы или домена, к которым относится этот объект. исходный_тип
Имя исходного типа данных для приведения. целевой_тип
Имя целевого типа данных для приведения. режим_аргумента
Режим аргумента обычной или агрегатной функции: IN , OUT , INOUT или VARIADIC . По умолчанию подразумевается IN . Заметьте, что COMMENT не учитывает аргументы OUT , так как для идентификации функции нужны только типы входных аргументов. Поэтому достаточно перечислить только аргументы IN , INOUT и VARIADIC . имя_аргумента
Имя аргумента обычной или агрегатной функции. Заметьте, что на самом деле COMMENT не обращает внимание на имена аргументов, так как для однозначной идентификации функции достаточно только типов аргументов. тип_аргумента
Тип данных аргумента обычной или агрегатной функции. oid_большого_объекта
OID большого объекта. тип_слева
тип_справа
Тип данных аргументов оператора (возможно, дополненный именем схемы). В случае отсутствия аргумента префиксного или постфиксного оператора укажите вместо типа NONE . PROCEDURAL
Это слово не несёт смысловой нагрузки. имя_типа
Имя типа данных, для которого предназначена трансформация. имя_языка
Имя языка, для которого предназначена трансформация. текст
Новый комментарий, записанный в виде строковой константы (или NULL для удаления комментария).
Замечания
В настоящее время механизм безопасности в части просмотра комментариев отсутствует: любой пользователь, подключённый к базе данных, может видеть все комментарии всех объектов базы. Для общих объектов, таких как базы данных, роли и табличные пространства, комментарии хранятся глобально, так что их может видеть любой пользователь, подключённый к любой базе данных в кластере. Поэтому ничего секретного писать в комментариях не следует.
Примеры
Добавление комментария для таблицы mytable :
COMMENT ON TABLE mytable IS 'Это моя таблица.';
COMMENT ON TABLE mytable IS NULL;
Ещё несколько примеров:
COMMENT ON ACCESS METHOD rtree IS 'Метод доступа R-Tree'; COMMENT ON AGGREGATE my_aggregate (double precision) IS 'Вычисляет дисперсию выборки'; COMMENT ON CAST (text AS int4) IS 'Выполняет приведение строк к int4'; COMMENT ON COLLATION "fr_CA" IS 'Канадский французский'; COMMENT ON COLUMN my_table.my_column IS 'Порядковый номер сотрудника'; COMMENT ON CONVERSION my_conv IS 'Перекодировка в UTF8'; COMMENT ON CONSTRAINT bar_col_cons ON bar IS 'Ограничение столбца col'; COMMENT ON CONSTRAINT dom_col_constr ON DOMAIN dom IS 'Ограничение col для домена'; COMMENT ON DATABASE my_database IS 'База данных разработчиков'; COMMENT ON DOMAIN my_domain IS 'Домен почтового адреса'; COMMENT ON EXTENSION hstore IS 'Реализует тип данных hstore'; COMMENT ON FOREIGN DATA WRAPPER mywrapper IS 'Моя обёртка сторонних данных'; COMMENT ON FOREIGN TABLE my_foreign_table IS 'Информация о сотрудниках в другой БД'; COMMENT ON FUNCTION my_function (timestamp) IS 'Возвращает число римскими цифрами'; COMMENT ON INDEX my_index IS 'Обеспечивает уникальность по коду сотрудника'; COMMENT ON LANGUAGE plpython IS 'Поддержка Python для хранимых процедур'; COMMENT ON LARGE OBJECT 346344 IS 'Документ планирования'; COMMENT ON MATERIALIZED VIEW my_matview IS 'Сводка истории заказов'; COMMENT ON OPERATOR ^ (text, text) IS 'Вычисляет пересечение двух текстов'; COMMENT ON OPERATOR - (NONE, integer) IS 'Унарный минус'; COMMENT ON OPERATOR CLASS int4ops USING btree IS 'Операторы для четырёхбайтовых целых (для B-деревьев)'; COMMENT ON OPERATOR FAMILY integer_ops USING btree IS 'Все целочисленные операторы (для B-деревьев)'; COMMENT ON POLICY my_policy ON mytable IS 'Фильтр строк по пользователям'; COMMENT ON ROLE my_role IS 'Административная группа для таблиц бухгалтерии'; COMMENT ON RULE my_rule ON my_table IS 'Протоколирует изменения в записях сотрудников'; COMMENT ON SCHEMA my_schema IS 'Данные отдела'; COMMENT ON SEQUENCE my_sequence IS 'Предназначена для генерации первичных ключей'; COMMENT ON SERVER myserver IS 'Мой сторонний сервер'; COMMENT ON TABLE my_schema.my_table IS 'Данные сотрудников'; COMMENT ON TABLESPACE my_tablespace IS 'Табличное пространство для индексов'; COMMENT ON TEXT SEARCH CONFIGURATION my_config IS 'Фильтрация специальных слов'; COMMENT ON TEXT SEARCH DICTIONARY swedish IS 'Стеммер Snowball для шведского языка'; COMMENT ON TEXT SEARCH PARSER my_parser IS 'Разделяет текст на слова'; COMMENT ON TEXT SEARCH TEMPLATE snowball IS 'Стеммер Snowball'; COMMENT ON TRANSFORM FOR hstore LANGUAGE plpythonu IS 'Трансформирует данные из hstore в словарь языка Python'; COMMENT ON TRIGGER my_trigger ON my_table IS 'Обеспечивает ссылочную целостность'; COMMENT ON TYPE complex IS 'Тип данных комплексных чисел'; COMMENT ON VIEW my_view IS 'Представление расходов по отделам';
Совместимость
Оператор COMMENT отсутствует в стандарте SQL.
| Пред. | Наверх | След. |
| CLUSTER | Начало | COMMIT |
Система управления базами данных SQLite. Изучаем язык запросов SQL и реляционные базы данных на примере библиотекой SQLite3. Курс для начинающих.
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем рубрику реляционные базы данных и ее раздел библиотека SQLite. Не стоит недооценивать наличие комментариев при проектировании баз данных и уж тем более не стоит ими пренебрегать. Комментарии могут быть прекрасной документацией вашего SQL кода. Комментарии помогают другим разработчикам понять ваш код. Поэтому не стесняйтесь использовать комментарии в своих базах данных. Лучше потратить 2 минуты на написание комментария, чем потом, через какое-то время, потратить два часа на осмысление SQL запросов.
Комментарии в SQLite бывают двух видов: строчные и блочные.
Пример строчного SQL комментария:
Простой, но эффективный прием для работы с блоками комментариев SQL
Разработчикам систем, использующих базы данных, приходится много писать на языке SQL. Все знают, но не все это осознают, что SQL переживает уже четвертый десяток лет как одна из самых успешных и широко распространенных технологий в мире компьютеров. Технологии не стоят на месте, но даже сегодня, многие создатели пост-реляционных систем баз данных специально вкладывают средства и ресурсы для предоставления пользователям SQL-подобных средств поиска и манипуляции данных. Давайте рассмотрим, как современные требования к продуктам для разработки БД облегчают и ускоряют создание корректного кода на SQL и познакомимся с любопытным маленьким трюком.
Недавно наткнулся на простое и эффективное решение одной элементарной даже не проблемы, а неудобства и решил поделиться. Суть вот в чем:
Как и любой практикующий разработчик SQL или администратор БД, я сохраняю скрипты для решения повторяющихся задач, чтобы в будущем уже иметь подготовленный инструмент для быстрого выполнения. С помощью DBArtisan можно автоматически записывать все операторы SQL, которые я выполнял в течение сессии и потом использовать некоторые из них для создания и сохранения таких скриптов. В среде DBArtisan я могу поместить в главное меню пункты для вызова наиболее часто используемых скриптов или одновременно выполнить скрипт на нескольких серверах.
- «Строчные», которые начинаются с символов ‘— ‘, и превращают все до конца этой строки в текст, который транслятор SQL не воспринимает. При переходе на следующую строку этот комментарий уже не действует
- «Блочные», которыми можно превратить в комментарий большой блок SQL -кода. Они начинаются с комбинации символов ‘/*’ и заканчиваются, как только встретится комбинация ‘*/’. Эти символы обозначают «начало блока» и «конец блока»
while (@j < @nstr) begin -- цикл по строкам массивов INSERT INTO PRR.TRANSITADVOLS ( VAL_ID,VAL_MASH ) VALUES /* здесь может быть блок любого текста произвольной длины, который не будет выполняться сервером, . . обратите внимание на "строчный" синтаксис комментария в начале следующей строки --*/ (@USERNM,@BDATE);
Казалось бы, ничего не изменилось, но помещение «конца блока» в «строчном» комментарии дает нам возможность для активации всего этого блока (когда мы решим, что нам нужно его выполнить) не искать и удалять как начало, так и конец блока, а просто поставить символы ‘--' перед комбинацией «начало блока»
/* выключенный блок исходного текста --*/ --/* включенный блок исходного текста --*/
Если бы мы не поместили «конец блока» внутрь строчного комментария, выполнение скрипта было бы прекращено, и мы получили бы ошибку Incorrect syntax near ‘*'
Остается только удивляться, почему мы с коллегами, в свое время, прошли мимо этого решения.
Теперь мы можем локализовать похожие, но специфические куски кода в одном месте, управлять своим кодом.
-- Блоки помогают управлять спецификой аналогичного кода /* --SCRIPT 'A' - ЭТА ЧАСТЬ используется для вх. дат в формате mm/dd/yyyy . .. сюда поместите код для поддержки дат в формате mm/dd/yyyy . --*/ /* -- SCRIPT 'B' - ЭТА ЧАСТЬ используется для вх. дат в формате dd/mm/yyyy . .. сюда поместите код для поддержки дат в формате dd/mm/yyyy . --*/
Допустим, мне нужно обработать входные данные с датами в «американском» формате — ‘mm/dd/yyyy'. Я вставляю символы — перед первой группой «начало блока» и включается выполнение блока SCRIPT A. При этом — SCRIPT B остается выключенным. Если поступили данные с датой в «нашем» формате — dd/mm/yyyy — то поступаю наоборот, ставлю - перед вторым «началом блока», и включается блок SCRIPT B
Трассировка
При помощи этого же трюка T-SQL позволяет нам использовать еще один полезный «побочный эффект».
-- Сообщите при помощи PRINT, какой блок текста активен --/* --SCRIPT 'A' - ЭТА ЧАСТЬ используется для целых данных Print 'Script A active - integer data' --*/ Print 'Script A inactive /* -- SCRIPT 'B' - ЭТА ЧАСТЬ используется для символьных Print 'Script B active - char data' --*/ Print 'Script B inactive'
В окне сообщений появится трассировка:
И все это достигается путем комментирования одной строки исходного текста.
Отладка
Случалось ли вам разбираться, почему запрос со сложным набором условий отбора работает совсем не так, как ожидалось?
Теперь это сделать проще, путем поочередной проверки работоспособности всех или части этих условий
SELECT * FROM #table /* -- Сложный набор условий с непроверенными результатами WHERE ID in ( SELECT something FROM a-really-complex-condition WHERE we-are-not-sure-what-we-get ) --*/ WHERE -- В работоспособности этого условия мы уже убедились
Или управлять глубиной модификации данных при выполнении скрипта
update #table set Comment = 'changed' where Comment = 'change me' /* -- use 'line comment' to enable UPDATE to proceed and 1 = 1 --*/ and 1 = 0
Этот пример позволяет мне отлаживать весь скрипт без выполнения модификации на самом деле до тех пор, пока я не проверю, что все работает, как следует.
Уважаемый автор привел пример использования этого трюка для поддержки вложенных одного в другой блоков комментариев.
SELECT * FROM Mytable WHERE 1 = 1 -- always true /* -- first condition to check AND condition1 = TRUE --*/ /* -- some more conditions AND condition2 = ( SELECT condition3 FROM Myanothertable WHERE 1 = 1 /* -- Paying attention? This is a nested Comment Block AND NestedCondition = TRUE --*/ ) --*/ --/* the comment here ‘activates' this condition. It gets checked. AND Comment = 'buggy value' --*/
Вы можете убедиться сами, это действительно работает. В любом ISQL редакторе, например, запустите DBArtisan, и скопируйте туда этот текст.
SQL — это универсальный, если можно так сказать, стандартизированный язык, который, тем не менее, в каждой СУБД преображается в соответствии с требованиями, предъявляемыми к нему создателями данной платформы. В MS SQL — это диалект T-SQL, в Oracle мы применяем PL/SQL, в прочих платформах — вносятся свои уникальные особенности синтаксиса и поведения. Вот как это выглядит для MS SQL:

Я решил применить понравившийся мне трюк для работы с Oracle. Можно дополнительно запустить поставляемые вместе с Oracle средства, но можно остаться в DBArtisan, который поддерживает одновременную работу с разными платформами СУБД.
В DBArtisan я открыл еще одно окно редактора SQL, указал, что этот редактор связан уже с БД Oracle и перенес в него скрипт из примера выше:

Я только вставил текст запроса. Видите красную отметку у строки 13?
Это автоматический синтаксис-анализатор DBArtisan сигнализирует, что SQL текст не соответствует правилам данного диалекта SQL. Проверка на сайте Oracle подтвердила, что, несмотря на графические синтаксические схемы в документации, Oracle «вложенные» комментарии не поддерживал и не поддерживает. Кстати, остальные примеры сработали!
Автоматический синтаксический анализатор/валидатор — это одна из трех составных частей, которые были включены в редактор SQL DBArtisan, в соответствии с современными требованиями для ускорения разработки программ на SQL и улучшения их качества. Также он обнаруживает случаи использования имен объектов, которые отсутствуют в БД, прямо по мере набора текста.
Еще очень помогает при разработке SQL программ, сильно ускоряет и позволяет избежать простейших ошибок написания режим Code Completion. Если вам приходилось писать на современных языках программирования в средах быстрой разработки приложений, например, Delphi или C++Builder, Java Designer или Eclipse, вы с ней знакомы: по мере набора текста, редактор сам подбирает подходящие по контексту объекты (не только синтаксические элементы) и подставляет их в текст за вас или предлагает сделать выбор из списка. DBArtisan подбирает объекты из текущего контекста исходя из платформы СУБД редактора, из списка реально существующих объектов схемы используемого источника данных.
Если при написании сложного кода на SQL вдруг выясняется, что необходимо внести какие-то изменения в другие объекты схемы, ну например, добавить входной параметр в хранимую процедуру, можно просто перейти к ее редактированию (в специализированном диалоговом редакторе), выделив ее имя прямо в тексте на SQL и вызвав при помощи мышки соответствующую Hyperlink Object Action.

Как и любой текст, скрипты программ на SQL можно создавать в любом текстовом редакторе. Но если вы профессионал, вы очень много и часто работаете с SQL, то вам уже не будет достаточно наличия подсветки синтаксиса и автоматического переформатирования кода, особенно, если вам приходится переключаться между различными платформами СУБД.
Более того, известны более-менее успешные попытки сделать технологии разработки серверной части информационных систем более гибкими, более приспособленными для внесения изменений и реализации новых требований, в большей степени использующими преимущества коллективной разработки и многократного применения удачных и проверенных решений. Уже достаточно давно многие СУБД и решения для разработчиков имеют возможность применять «версионность» текстов на SQL. Об этом — в следующих статьях.
- Блог компании «Embarcadero (Borland)»
- SQL
