Спецификация значения
Функция
Определение значений параметров или предопределенных переменных.
Спецификация
::=
| 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
Синтаксические правила
-
< Спецификация значения >
задает значение, которое не содержится среди столбцов списка таблиц SQL-запроса.select user, count(*) from AUTO; | SYSTEM| 1000|
select rownum, sysdate; |1 |31.03.2003:11:33:53.00 |
select 146; |146|
-
Типом данных
USER
,EFFECTIVE_USER
,LINTER_SYSTEM_USER
являетсяCHAR(66)
. -
Типом данных
SYSDATE
,CURRENT_TIMESTAMP
,NOW
,ROWTIME
,LOCALTIME
,LOCALTIMESTAMP
,CURRENT_DATE
,CURRENT_TIME
являетсяDATE
. -
Типом данных
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
. -
Типом данных
DBROWTIME
,SESSIONID
являетсяBIGINT
. -
Значения
NOW
иSYSDATE
являются синонимами.select sysdate, now; |14.12.2007:09:14:15.00|14.12.2007:09:14:15.00|
-
Значения CURRENT_TIMESTAMP и LOCALTIMESTAMP являются синонимами.
select CURRENT_TIMESTAMP union all select LOCALTIMESTAMP; |28.08.2012:15:39:39.51| |28.08.2012:15:39:39.51|
-
Значения CURRENT_TIME и LOCALTIME являются синонимами.
select CURRENT_TIME union all select LOCALTIME; |00.00.0000:15:49:46.18| |00.00.0000:15:49:46.18|
Общие правила
-
Значение
USER
равно< имени пользователя >
(символьному идентификатору) пользователя БД в текущем сеансе работы (в данном соединении с БД) и закрепленное за родительским каналом.//Является ли текущий пользователь владельцем таблиц AUTO. select case $$$s34 when user then 'Да' else 'Нет' end from $$$sysrl, $$$usr where $$$s12=$$$s31 and $$$s13='AUTO'; |Да |
-
Запрос
select user;
поданный из хранимой процедуры от имени владельца процедуры, возвращает не имя владельца процедуры, а имя пользователя, который запустил ее на выполнение.
-
Значение
LINTER_USER_ID
равно числовому идентификатору пользователя БД в текущем сеансе работы (в данном соединении с БД) и закреплено за родительским каналом (столбец$$$S31
в системной таблице$$$USR
).select $$$s31 from $$$usr where $$$s34=(select user);
-
Значение
EFFECTIVE_USER
возвращает< имя пользователя >
(символьный идентификатор) от имени которого выполнятся запрос.Примечание
Поддерживается со сборки 6.0.17.92.
-
Запрос
select EFFECTIVE_USER;
поданный из хранимой процедуры, выполняемой от имени владельца, возвращает имя владельца процедуры, от имени которого выполняются все запросы в данной процедуре.
-
Значение
EFFECTIVE_USER_ID
возвращает числовой идентификатор пользователя БД от имени которого выполнятся запрос.Примечание
Поддерживается со сборки 6.0.17.92.
-
Запрос
select EFFECTIVE_USER_ID;
поданный из хранимой процедуры, выполняемой от имени владельца, возвращает числовой идентификатор владельца процедуры, от имени которого выполняются все запросы в данной процедуре.
-
Значение
LINTER_SYSTEM_USER
соответствует< имени создателя БД >
(идентификатору). -
Получить явное значение
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;
-
Значение
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 |
-
Значения 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|
-
Значения 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|
-
Значение 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|
-
Значение CURRENT_SCHEMA предоставляет текущую схему пользователя.
select current_schema; |SYSTEM |
-
ROWID
возвращает системный номер записи (уникальное значение). Максимальное значение –0x01FFFFFF
. -
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|
-
ROWTIME
возвращает дату/время последнего изменения строки в таблице. Это поле доступно только для чтения, принудительно установить собственное время внесения строки в таблицу невозможно. -
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;
-
Значение
ROWTIME
изменяется при операцияхUPDATE, UPDATE CURRENT
над записью, при добавлении и удаленииBLOB
, а для записей системных таблиц – также и при операциях, специфических для этих таблиц. ЗначениеROWTIME
хранится в БД вместе сROWID
и содержимым записи. В СУБД ЛИНТЕР оно всегда запоминается и выдается по Гринвичу (т.к. используется в операциях журнала и не должно меняться при переносе БД в другой часовой пояс).//Удалить записи с истекшим сроком хранения (за предыдущий год) delete from tst where to_number(to_char(rowtime,'yyyy')) < = to_number(to_char(sysdate,'yyyy'))-1;
-
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 |
-
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|
-
LAST_AUTOINC
возвращает последнее из значений AUTOINC-столбцов, которое было добавлено в какую-либо таблицу в текущем сеансе. АналогичноLAST_ROWID
: если от одного канала открыто несколько курсоров, то значениеLAST_AUTOINC
обновляется одновременно для основного канала и всех этих курсоров. Если же приложение открыло несколько независимых каналов, то значенияLAST_AUTOINC
для всех них будут независимыми. -
LAST_AUTOINC
возвращает значение типаINT
. Если необходимо вернуть последнее вставленное вAUTOINC
значение какBIGINT
, следует использовать конструкциюCAST LAST_AUTOINC AS BIGINT
. -
Значение
LINTER_NAME_LENGTH
возвращает максимально возможную длину идентификатора объекта БД.select LINTER_NAME_LENGTH; |66 |
-
Значение
TRIGGER_INFO_SIZE
возвращает максимально возможную длину описания триггера (столбец$$$INFO
системной таблицы$$$TRIG
).select TRIGGER_INFO_SIZE; |320 |
-
Значение
AUD_OBJ_NAME_LEN
возвращает максимально возможную длину имени объекта контроля (Audit).select AUD_OBJ_NAME_LEN; |134 |
-
Значение
PROC_INFO_SIZE
возвращает максимально возможную длину описания хранимой процедуры (столбец$$$INFO
системной таблицы$$$PROC
).select proc_info_size; |32 |
-
Значение
PROC_PAR_NAME_LEN
возвращает максимально возможную длину имен параметров хранимой процедуры.select PROC_PAR_NAME_LEN |66 |
-
PROC_PAR_NAME_LEN
возвращает длину поляNAME
в системной таблице$$$PRОC
. -
Значение
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 | …
-
USER_TIME
возвращает время (в миллисекундах) работы ядра СУБД ЛИНТЕР. Значение берется из «виртуальной» таблицы$$$SYSINFO
.select user_time from $$$sysinfo;
-
SYSTEM_TIME
возвращает время (в миллисекундах), затраченное ядром СУБД ЛИНТЕР на операции ввода-вывода. Значение берется из «виртуальной» таблицы$$$SYSINFO
.select system_time from $$$sysinfo;