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