Oracle создает таблицу с комментариями столбца

Есть ли синтаксис комментария столбца, который позволяет мне указать комментарий столбца непосредственно, где я объявляю столбец в инструкции create table (т.е. inline)? 11g spec ничего не упоминает, на другой странице что-то упоминается, но я не мог заставить его работать. Существует способ указать комментарии после создания таблицы, но я думаю, что это раздражает, что комментарий отделен от определения поля. Я ищу что-то вроде этого (что не работает):

create table whatever (
 field number(15,0) primary key comment 'primary key generated from sequence pkseq',
 ...
)

Ответ 1

Я боюсь, что "раздражающий" COMMENT ON синтаксис - единственный способ сделать это. SQL Server, PostgreSQL и DB2 используют один и тот же синтаксис (хотя, насколько мне известно, не существует стандартного синтаксиса ANSI для добавления комментариев к объектам базы данных).

MySQL поддерживает способ работы. Я согласен, что это был бы более хороший механизм, но по моему опыту мало кто использует комментарии вообще, что я сомневаюсь, что Oracle когда-нибудь изменит его.

Ответ 2

Я боюсь, что это можно сделать только после создания таблицы, используя синтаксис comment on column ... is ''.

Ответ 3

Обходной путь к этому раздражающему синтаксису - также просмотр и редактирование таблиц в Oracles SQLExplorer. Он содержит мастер, который позволяет редактировать комментарии рядом с столбцами. Это даже позволяет легко создавать скрипты alter table.

Моя процедура при редактировании таблиц заключается в том, чтобы вводить изменения в мастере без их фактического выполнения, затем перейдите на вкладку DDL и извлеките SQL оттуда (как обновление, а не полное создание script) и нажмите cancel on Мастер. Затем я помещаю созданный SQL в SQL script, который я пишу. Только когда я закончил с script, я все выполнил; Я не делаю никаких изменений с самим мастером.

Ответ 4

Тест на sqlplus (или аналогичный), но синтаксис выглядит следующим образом:

-- assuming you have privileges
COMMENT ON COLUMN SCHEMA1.TABLE1.COL1 
  IS 'My comment'

-- then you can double check like this
SELECT * FROM all_col_comments WHERE 
  (OWNER, TABLE_NAME, COLUMN_NAME) 
  IN (('SCHEMA1','TABLE1','COL1'));

Обратите внимание, что комментарий будет отображаться в SQLDeveloper (или Toad или независимо от того, что у вас есть), пока вы не откроете указанные свойства таблицы.

Подобный синтаксис может использоваться для аннотирования таблиц, индексов и материализованных представлений. [источник: https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4009.htm]

Я понимаю, что подобный синтаксис существует для MySQL и других, но он не является правильным ANSI. Это очень полезно.