Создание комментария

Функция

Создание комментария к объекту БД.

Спецификация
   
< полное имя таблицы >::=
< полное имя хранимой процедуры >::=
< имя параметра процедуры >::=
< комментарий >::=
Синтаксические правила
  1. Максимальная длина < комментария > 240 символов. При превышении предельной длины он усекается до 240 символов без какой-либо диагностики.

Общие правила
  1. Для создания комментариев в БД должна существовать системная таблица $$$OBJ_COMMENTS (создается с помощью SQL-скрипта systab.sql).

  2. Комментарии записываются в кодировке, установленной для системных таблиц БД (SET DATABASE NAMES < имя кодировки >).

  3. При удалении объекта комментарий к нему удаляется автоматически.

  4. При переименовании объекта комментарий к нему не изменяется.

  5. Для добавления комментария на таблицу или ее столбец нужно иметь привилегию REFERENCES на эту таблицу и соответствующий уровень мандатного доступа к ней.

  6. Для добавления комментария на процедуру или ее параметр нужно быть владельцем процедуры. Для добавления комментария на пользователя или роль нужно иметь уровень прав DBA.

Примеры
  1. Создание и просмотр комментариев к таблицам
    comment on table auto is 'Демонстрационная таблица';
    -- Комментарии к таблицам
    select cast ($$$usr.$$$s34 as char (18)) as "Имя схемы",
           cast ($$$sysrl.$$$s13 as char (18)) as "Имя таблицы",
           cast ($$$obj_comments.$$$text as char (30)) as "Комментарий"
      from LINTER_SYSTEM_USER.$$$sysrl,
           LINTER_SYSTEM_USER.$$$usr,
           LINTER_SYSTEM_USER.$$$obj_comments
     where $$$usr.$$$s31   = $$$sysrl.$$$s12
       and $$$usr.$$$s32   = 0
       and $$$obj_comments.$$$obj_type = 8
       and /* код 8 – таблица */ $$$obj_comments.$$$obj_id = $$$sysrl.$$$s11;
    
    Результат:
    
     Имя схемы          Имя таблицы        Комментарий
     ---------          -----------        -----------
    |SYSTEM            |AUTO              |Демонстрационная таблица      |
  2. Создание и просмотр комментариев к столбцам таблицы
    
    comment on column auto.model is 'Марка автомобиля';
    comment on column auto.color is 'Цвет автомобиля';
    comment on column auto.bodytype is 'Тип кузова';
    
    -- Комментарии к столбцам таблицы AUTO.SYSTEM
    select
      cast ($$$attri.$$$s23 as char (18)) as "Имя столбца",
      cast ($$$obj_comments.$$$text as char (30)) as "Комментарий"
    from
      LINTER_SYSTEM_USER.$$$sysrl,
      LINTER_SYSTEM_USER.$$$usr,
      LINTER_SYSTEM_USER.$$$attri,
      LINTER_SYSTEM_USER.$$$obj_comments
    where
      $$$attri.$$$s21 = $$$sysrl.$$$s11 and
      $$$usr.$$$s31   = $$$sysrl.$$$s12 and
      $$$sysrl.$$$s13 = 'AUTO'          and /* или другое имя таблицы   */
      $$$usr.$$$s34   = 'SYSTEM'        and /* или другое имя схемы     */
      $$$usr.$$$s32   = 0               and
      $$$obj_comments.$$$obj_type = 22  and /* код 22 – столбец */
      $$$obj_comments.$$$obj_id = $$$sysrl.$$$s11 and
      $$$obj_comments.$$$nmr    = $$$attri.$$$s22;
    
    Результат:
    
     Имя столбца        Комментарий
     -----------        -----------
    |MODEL             |Марка автомобиля              |
    |COLOR             |Цвет автомобиля               |
    |BODYTYPE          |Тип кузова                    |
  3. -- Создание и просмотр комментариев к хранимой процедуре и ее параметрам
    
    create user u1 identified by '12345678';
    grant dba to u1;
    username U1/12345678
    create or replace procedure proc_c (in i int; in j int) result int 
    code 
      return i+j; 
    end;
    comment on procedure proc_c is 'Сумма двух значений';
    comment on parameter proc_c.i is 'Первое слагаемое';
    comment on parameter proc_c.j is 'Второе слагаемое';
    comment on parameter u1.proc_c.j is 'Второе слагаемое';
    
    -- Комментарии к процедурам
    select
      cast ($$$usr.$$$s34 as char (18)) as "Имя схемы",
      cast ($$$proc.$$$name as char (18)) as "Имя процедуры",
      cast ($$$obj_comments.$$$text as char (30)) as "Комментарий"
    from
      LINTER_SYSTEM_USER.$$$proc,
      LINTER_SYSTEM_USER.$$$usr,
      LINTER_SYSTEM_USER.$$$obj_comments
    where
      $$$usr.$$$s31   = $$$proc.$$$owner and
      $$$usr.$$$s32   = 0                and
      $$$obj_comments.$$$obj_type = 12   and /* код 12 – процедура */
      $$$obj_comments.$$$obj_id = $$$proc.$$$id;
    
    Результат:
    
     Имя схемы          Имя процедуры      Комментарий
     ---------          -------------      -----------
    |U1                |PROC_C            |Сумма двух значений 
  4. -- Комментарии к параметрам процедуры U1.PROC_C
    select
      cast ($$$prcd.name as char (18)) as "Имя параметра",
      cast ($$$obj_comments.$$$text as char (30)) as "Комментарий"
    from
      LINTER_SYSTEM_USER.$$$proc,
      LINTER_SYSTEM_USER.$$$usr,
      LINTER_SYSTEM_USER.$$$prcd,
      LINTER_SYSTEM_USER.$$$obj_comments
    where
      $$$usr.$$$s31   = $$$proc.$$$owner and
      $$$usr.$$$s32   = 0                and
      $$$prcd.procid  = $$$proc.$$$id    and
      $$$proc.$$$name = 'PROC_C'         and /* или другое имя процедуры */
      $$$usr.$$$s34   = 'U1'             and /* или другое имя схемы     */
      $$$obj_comments.$$$obj_type = 23   and /* код 23 – параметр */
      $$$obj_comments.$$$obj_id = $$$proc.$$$id and
      $$$obj_comments.$$$nmr = $$$prcd.argid;
    
    
    Результат:
    
     Имя параметра      Комментарий
     -------------      -----------
    |I                 |Первое слагаемое              |
    |J                 |Второе слагаемое              |