Спецификация значения
Функция
Определение значений параметров или предопределенных переменных.
Спецификация
::=| 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;