Спецификация значения

Функция

Определение значений параметров или предопределенных переменных.

Спецификация

 
< спецификация значения >::=
литерал
| USER
| LINTER_USER_ID
| EFFECTIVE_USER
| EFFECTIVE_USER_ID
| LINTER_SYSTEM_USER
| SYSDATE
| {LOCALTIMESTAMP| CURRENT_TIMESTAMP}
| NOW
| {LOCALTIME |CURRENT_TIME}
| ROWID
| ROWTIME
| DBROWTIME
| ROWNUM
| LAST_ROWID
| LAST_AUTOINC
| LINTER_NAME_LENGTH
| TRIGGER_INFO_SIZE
| AUD_OBJ_NAME_LEN
| PROC_INFO_SIZE
| PROC_PAR_NAME_LEN
| SESSIONID
| USER_TIME
| SYSTEM_TIME
| CURRENT_DATE
| CURRENT_SCHEMA

Синтаксические правила

  1. < Спецификация значения > задает значение, которое не содержится среди столбцов списка таблиц SQL-запроса.

    select user, count(*) from AUTO;
    | SYSTEM| 1000|
    select rownum, sysdate;
    |1 |31.03.2003:11:33:53.00 |
    select 146;
    |146|
  2. Типом данных USER, EFFECTIVE_USER, LINTER_SYSTEM_USER является CHAR(66).

  3. Типом данных SYSDATE, CURRENT_TIMESTAMP, NOW, ROWTIME, LOCALTIME, LOCALTIMESTAMP, CURRENT_DATE, CURRENT_TIME является DATE.

  4. Типом данных LINTER_USER_ID, EFFECTIVE_USER_ID, LAST_ROWID, LAST_AUTOINC, ROWNUM, ROWID, LINTER_NAME_LENGTH, TRIGGER_INFO_SIZE, AUD_OBJ_NAME_LEN, PROC_INFO_SIZE, PROC_PAR_NAME_LEN является INT.

  5. Типом данных DBROWTIME, SESSIONID является BIGINT.

  6. Значения NOW и SYSDATE являются синонимами.

    select sysdate, now;
    |14.12.2007:09:14:15.00|14.12.2007:09:14:15.00|
  7. Значения CURRENT_TIMESTAMP и LOCALTIMESTAMP являются синонимами.

    select CURRENT_TIMESTAMP
     union all
    select LOCALTIMESTAMP;
    
    |28.08.2012:15:39:39.51|
    |28.08.2012:15:39:39.51|
  8. Значения CURRENT_TIME и LOCALTIME являются синонимами.

    select CURRENT_TIME
     union all
    select LOCALTIME;
    
    |00.00.0000:15:49:46.18|
    |00.00.0000:15:49:46.18|

Общие правила

  1. Значение USER равно < имени пользователя > (символьному идентификатору) пользователя БД в текущем сеансе работы (в данном соединении с БД) и закрепленное за родительским каналом.

    //Является ли текущий пользователь владельцем таблиц AUTO.
    select case $$$s34 when user then 'Да' else 'Нет' end
      from $$$sysrl, $$$usr
     where $$$s12=$$$s31 and $$$s13='AUTO';
    |Да |
  2. Запрос

    select user;

    поданный из хранимой процедуры от имени владельца процедуры, возвращает не имя владельца процедуры, а имя пользователя, который запустил ее на выполнение.

  3. Значение LINTER_USER_ID равно числовому идентификатору пользователя БД в текущем сеансе работы (в данном соединении с БД) и закреплено за родительским каналом (столбец $$$S31 в системной таблице $$$USR).

    select $$$s31 from $$$usr where $$$s34=(select user);
  4. Значение EFFECTIVE_USER возвращает < имя пользователя > (символьный идентификатор) от имени которого выполнятся запрос.

    Примечание

    Поддерживается со сборки 6.0.17.92.

  5. Запрос

    select EFFECTIVE_USER;

    поданный из хранимой процедуры, выполняемой от имени владельца, возвращает имя владельца процедуры, от имени которого выполняются все запросы в данной процедуре.

  6. Значение EFFECTIVE_USER_ID возвращает числовой идентификатор пользователя БД от имени которого выполнятся запрос.

    Примечание

    Поддерживается со сборки 6.0.17.92.

  7. Запрос

    select EFFECTIVE_USER_ID;

    поданный из хранимой процедуры, выполняемой от имени владельца, возвращает числовой идентификатор владельца процедуры, от имени которого выполняются все запросы в данной процедуре.

  8. Значение LINTER_SYSTEM_USER соответствует < имени создателя БД > (идентификатору).

  9. Получить явное значение LINTER_SYSTEM_USER с помощью SQL-запроса невозможно, т.е. запросы типа

    select LINTER_SYSTEM_USER;

    не обрабатываются.

    Извлечь это имя можно только c помощью обращения к системной таблице пользователей БД (rowid=1 – это системный идентификатор создателя БД):

    select $$$S34 from LINTER_SYSTEM_USER.$$$USR where rowid=1;

    Запрос к системной таблице с явным указанием имени ее создателя:

    select count(*) from "SYSTEM"."$$$ATTRI";
    select count(*) from SYSTEM.$$$attri;

    Запрос к системной таблице с использованием псевдопеременной:

    select count(*) from LINTER_SYSTEM_USER.$$$ATTRI;
  10. Значение SYSDATE равно текущим дате и времени по Гринвичу (нулевому часовому поясу).

    select 'На ' || to_char(sysdate,'dd.mm.yyyy:hh:mi:ss') || ' число строк в таблице AUTO равно ' || to_char(count(*),'9999')
      from auto;
    |На 23.04.2003:17:08:05 число строк в таблице AUTO равно 1000 |
  11. Значения CURRENT_TIMESTAMP и LOCALTIMESTAMP равны текущей локальной дате, установленной на ЛИНТЕР-сервере. Они эквивалентны вызову функции to_localtime(sysdate).

    select sysdate
     union all
    select CURRENT_TIMESTAMP
     union all
    select LOCALTIMESTAMP
     union all
    select to_localtime(sysdate);
    
    |28.08.2012:11:45:12.28|
    |28.08.2012:15:45:12.28|
    |28.08.2012:15:45:12.28|
    |28.08.2012:15:45:12.28|
  12. Значения CURRENT_TIME и LOCALTIME равны текущему локальному времени, установленному на ЛИНТЕР-сервере (дата имеет нулевое значение).

    select sysdate
     union all
    select CURRENT_TIME
     union all
    select LOCALTIME
     union all
    select to_localtime(sysdate);
    
    |28.08.2012:11:56:35.62|
    |00.00.0000:15:56:35.62|
    |00.00.0000:15:56:35.62|
    |28.08.2012:15:56:35.62|
  13. Значение CURRENT_DATE равно текущей локальной дате, установленной на ЛИНТЕР-сервере (время имеет нулевое значение).

    select sysdate
     union all
    select CURRENT_TIME
     union all
    select CURRENT_DATE;
    
    |28.08.2012:12:00:17.10|
    |00.00.0000:16:00:17.10|
    |28.08.2012:00:00:00.00|
  14. Значение CURRENT_SCHEMA предоставляет текущую схему пользователя.

    select current_schema;
    |SYSTEM                                              |
  15. ROWID возвращает системный номер записи (уникальное значение). Максимальное значение – 0x01FFFFFF.

  16. ROWID уникально определяет запись в таблице в каждый момент времени (т.е. в таблице не может быть одновременно двух записей с одинаковым ROWID). Но если удалить запись с некоторым ROWID, то этот ROWID может быть впоследствии использован повторно СУБД ЛИНТЕР для новой записи. ROWID записи сохраняется неизменным на всем протяжении ее существования в БД и не меняется при операциях UPDATE и UPDATE CURRENT над этой записью.

    create table SAMPLE (c char);
    insert into SAMPLE values('a');
    insert into SAMPLE values('b');
    insert into SAMPLE values('c');
    insert into SAMPLE values('d');
    select rowid, c from SAMPLE;
    
    |1|a|
    |2|b|
    |3|c|
    |4|d|
    delete from SAMPLE where rowid=2;
    update SAMPLE set c='F' where rowid=4;
    select rowid, c from SAMPLE;
    
    |1|a|
    |3|c|
    |4|F|
  17. ROWTIME возвращает дату/время последнего изменения строки в таблице. Это поле доступно только для чтения, принудительно установить собственное время внесения строки в таблицу невозможно.

  18. DBROWTIME возвращает время последнего изменения строки в виде значения BIGINT, которое представляет время в виде количества интервалов времени, прошедших с 01.01.1990:00:00:00.00 (один интервал времени равен 1/65536 части секунды). В отличие от ROWTIME, которое возвращает округляемое значение времени в виде DATE (т.е. оно может не быть уникальным), псевдостолбец DBROWTIME всегда предоставляет уникальное значение времени.

    select dbrowtime,rowtime  from auto;
    select min(dbrowtime), max(dbrowtime) from auto;
  19. Значение ROWTIME изменяется при операциях UPDATE, UPDATE CURRENT над записью, при добавлении и удалении BLOB, а для записей системных таблиц – также и при операциях, специфических для этих таблиц. Значение ROWTIME хранится в БД вместе с ROWID и содержимым записи. В СУБД ЛИНТЕР оно всегда запоминается и выдается по Гринвичу (т.к. используется в операциях журнала и не должно меняться при переносе БД в другой часовой пояс).

    //Удалить записи с истекшим сроком хранения (за предыдущий год)
    delete from tst 
     where to_number(to_char(rowtime,'yyyy')) < = to_number(to_char(sysdate,'yyyy'))-1;
  20. ROWNUM возвращает порядковый номер записи в выборке данных. Тип значения – INT. ROWNUM следует указывать только в SELECT-списке (как в основном запросе, так и в подзапросах). ROWNUM вычисляется позже проверки условий и сортировки результата.

    select rownum, rowid from tst1
     union
    select rownum, rowid from tst2;
    ---------
    |1|100  |
    |2|101  |
    |3|105  |
    |4|1000 |
    |5|1001 |
  21. LAST_ROWID возвращает значение последнего ROWID, который был обработан в текущем сеансе при выполнении INSERT, UPDATE, DELETE-запросов. Если от одного канала открыто несколько курсоров, то значение LAST_ROWID обновляется одновременно для основного канала и всех этих курсоров. Если же приложение открыло несколько независимых каналов, то значения LAST_ROWID для всех них будут независимыми.

    /* начало сеанса */
    select rowid, last_rowid from test;
    |1|0|
    |2|0|
    insert into test (i,blb) values(100,NULL);
    select rowid, last_rowid from test;
    |1|3|
    |2|3|
    |3|3|
    update bank set name ='АКБ Промбанк' where rowid=204;
    select rowid, last_rowid from test;
    |1|204|
    |2|204|
    |3|204|
  22. LAST_AUTOINC возвращает последнее из значений AUTOINC-столбцов, которое было добавлено в какую-либо таблицу в текущем сеансе. Аналогично LAST_ROWID: если от одного канала открыто несколько курсоров, то значение LAST_AUTOINC обновляется одновременно для основного канала и всех этих курсоров. Если же приложение открыло несколько независимых каналов, то значения LAST_AUTOINC для всех них будут независимыми.

  23. LAST_AUTOINC возвращает значение типа INT. Если необходимо вернуть последнее вставленное в AUTOINC значение как BIGINT, следует использовать конструкцию CAST LAST_AUTOINC AS BIGINT.

  24. Значение LINTER_NAME_LENGTH возвращает максимально возможную длину идентификатора объекта БД.

    select LINTER_NAME_LENGTH;
    |66 |
  25. Значение TRIGGER_INFO_SIZE возвращает максимально возможную длину описания триггера (столбец $$$INFO системной таблицы $$$TRIG).

    select TRIGGER_INFO_SIZE;
    |320 |
  26. Значение AUD_OBJ_NAME_LEN возвращает максимально возможную длину имени объекта контроля (Audit).

    select AUD_OBJ_NAME_LEN;
    |134 |
  27. Значение PROC_INFO_SIZE возвращает максимально возможную длину описания хранимой процедуры (столбец $$$INFO системной таблицы $$$PROC).

    select proc_info_size;
    |32 |
  28. Значение PROC_PAR_NAME_LEN возвращает максимально возможную длину имен параметров хранимой процедуры.

    select PROC_PAR_NAME_LEN
    |66 |
  29. PROC_PAR_NAME_LEN возвращает длину поля NAME в системной таблице $$$PRОC.

  30. Значение SESSIONID является идентификатором текущей сессии пользователя БД. Идентификатор сессии создается ядром СУБД при выполнении пользователем соединения с БД (открытия канала) и остается неизменным для всех подканалов и курсоров, порождаемых при выполнении пользовательских SQL-запросов, триггеров и хранимых процедур по этому соединению.

    select channel, last_request, "SESSIONID"
      from linter_system_user.$$$chan a
     where a."SESSIONID" = SESSIONID;
    
    |channel |Last_request |Sessionid      |
    |3       |204          |34333001939289 |
    |4       |SELECT       |34333001939289 |
     …
  31. USER_TIME возвращает время (в миллисекундах) работы ядра СУБД ЛИНТЕР. Значение берется из «виртуальной» таблицы $$$SYSINFO.

    select user_time from $$$sysinfo;
  32. SYSTEM_TIME возвращает время (в миллисекундах), затраченное ядром СУБД ЛИНТЕР на операции ввода-вывода. Значение берется из «виртуальной» таблицы $$$SYSINFO.

    select system_time from $$$sysinfo;