powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите по процедуре
25 сообщений из 25, страница 1 из 1
Подскажите по процедуре
    #39338444
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
create or alter procedure GET_LAST_CONNECT
returns (
    D_STARTED date)
as
declare variable V_D date;
declare variable L_D date;
begin
  /* ищет в списке коннектов последний по текущему юзеру
     возвращает время его старта
     найденный коннект должен быть единственным или
     отличаться по времени от предпоследнего более чем на 2 секунды
     иначе вернёт '01.01.1900' как признак что коннект неопределён */

  /* по умолчанию считаем что не нашли */
  l_d=null; d_started=StrToDateFmt('dd.mm.yyyy','01.01.1900'); /* преобразование строки в дату с помощью функции StrToDateFmt из Delphi (время не отрабатывает только дату) */
  for select mon$timestamp from mon$attachments where mon$user=user
        order by mon$timestamp desc
      into :v_d do begin
    if (l_d is null) then l_d=v_d; /* последний конект */
    else begin
      /* коннект не единственный (сейчас v_d - предпоследний коннект) */
      if (l_d-v_d>0.00003) then d_started=l_d; /* если между последним и предпоследним разница по времени более 2 секунд */
      suspend; exit;
      /* разница в 1-ну секунду = 0,000011574
         разница в 2-е  секунды = 0,000023148
         ... */
    end
  end
if (l_d is not null) then d_started=l_d; /* если коннект единственный */ suspend; end




нужно добавить в начало условие
if
select left(current_user, 2) from RDB$DATABASE = 'SM'
then

Чтобы процедура отрабатывала только если имя пользователя начинается с SM. Пробовал по разному, постоянно получаю ошибку парсера.
create or alter procedure GET_LAST_CONNECT
returns (
D_STARTED date)
as
declare variable V_D date;
declare variable L_D date;
begin

if

select left(current_user, 2)
from RDB$DATABASE = 'SM'

then
/* ищет в списке коннектов последний по текущему юзеру
возвращает время его старта
найденный коннект должен быть единственным или
отличаться по времени от предпоследнего более чем на 2 секунды
иначе вернёт '01.01.1900' как признак что коннект неопределён */

/* по умолчанию считаем что не нашли */
L_D = null;


create or alter procedure GET_LAST_CONNECT
returns (
D_STARTED date)
as
declare variable V_D date;
declare variable L_D date;
begin

if
begin
select left(current_user, 2)
from RDB$DATABASE = 'SM'
end
then


create or alter procedure GET_LAST_CONNECT
returns (
D_STARTED date)
as
declare variable V_D date;
declare variable L_D date;
begin

if
begin
select left(current_user, 2)
from RDB$DATABASE = 'SM'
end
then
/* ищет в списке коннектов последний по текущему юзеру
возвращает время его старта
найденный коннект должен быть единственным или
отличаться по времени от предпоследнего более чем на 2 секунды
иначе вернёт '01.01.1900' как признак что коннект неопределён */

/* по умолчанию считаем что не нашли */
begin
L_D = null;
D_STARTED = STRTODATEFMT('dd.mm.yyyy', '01.01.1900');/* преобразование строки в дату с помощью функции StrToDateFmt из Delphi (время не отрабатывает только дату) */
for select MON$TIMESTAMP
from MON$ATTACHMENTS
where MON$USER = user
order by MON$TIMESTAMP desc
into :V_D
do
begin
if (L_D is null) then
L_D = V_D;/* последний конект */
else
begin
/* коннект не единственный (сейчас v_d - предпоследний коннект) */
if (L_D - V_D > 0.00003) then
D_STARTED = L_D;/* если между последним и предпоследним разница по времени более 2 секунд */
suspend;
exit;
/* разница в 1-ну секунду = 0,000011574
разница в 2-е секунды = 0,000023148
... */
end
end

if (L_D is not null) then
D_STARTED = L_D;/* если коннект единственный */
suspend;
end
end
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39338454
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

if ( (select ...) = 'SM')

if (CURRENT_USER starting with 'SM')
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39338458
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,
Код: sql
1.
d_started=StrToDateFmt('dd.mm.yyyy','01.01.1900');



UDF тут не нужна


Код: sql
1.
d_started=CAST('01.01.1900' AS DATE);
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39338515
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

ну и до кучи по самой процедуре, кроме уже сказанного:
- возможно лучше DATEDIFF вместо констант
- L_D и V_D не тип date, а timestamp
- возможно (не знаю точно задачи) стоит работать с mon$attachments в автономной транзакции, т.к. мониторинг "запекается" при первом обращении
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39338784
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисUDF тут не нужна

Да это не мой код, чужая база, в своё время мигрированая с IB, c кучей соответствующего мезозоя
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339258
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgmGallemar,
- L_D и V_D не тип date, а timestamp

timestamp есть в первом диалекте?

afgm- возможно (не знаю точно задачи) стоит работать с mon$attachments в автономной транзакции, т.к. мониторинг "запекается" при первом обращении
"запекается" это как?
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339283
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemartimestamp есть в первом диалекте?Есть. А почему удивление?
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339290
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

из источников:
TIMESTAMP
Этот тип данных доступен только в 3-м диалекте, состоит из двух 32-битных слов и хранит дату
со временем. Такое хранение эквивалентно типу DATE 1-го диалекта.
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339295
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Gallemar!
You wrote on 1 ноября 2016 г. 19:01:18:

Gallemar> /Этот тип данных доступен только в 3-м диалекте/хрень.
где взял?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339301
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Руководство по языку
SQL СУБД Firebird 2.5
20 июля 2016 — v.0469-1 для Firebird 2.5.6
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339308
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarнужно добавить в начало условие
if
select left(current_user, 2) from RDB$DATABASE = 'SM'
как же народу rdb$database припекло. Ну вот за каким фигом тут селект, если можно просто написать

if (left(current_user, 2) = 'SM') then
???
И pastor еще более простой вариант привел.

p.s. про "народ" я потому, что регулярно вот эту бредятину вижу.
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339324
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, готов встать на путь исправления!!!
Нашел курсы http://www.ibase.ru/crs_online/, научите меня хорошему!!!
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339329
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemartimestamp есть в первом диалекте?В 1-ом диалекте он называется DATE, но содержит и дату, и время
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339331
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

это надо переписать. TIMESTAMP и DATE полные синонимы в первом диалекте. Оба существуют
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339402
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar "запекается" это как?
Описания таблиц мониторинга
FB langrefЭти таблицы являются виртуальными в том смысле, что до обращения к ним со стороны пользователя, никаких данных в них не записано. Они заполняются данными только в момент запроса пользователя...

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

Снимок создаётся при первой выборке из любой таблице мониторинга и сохраняется до конца текущей транзакции , чтобы запросы к множеству таблиц (например, главная-подчинённая) всегда возвращал непротиворечивые данные.
off для Симонова Дениса: из любой таблиц_е_
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339417
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

чудится мне, что до какого-то момента timestamp в 1 диалекте не существовал. Я в том смысле, что в ИБ 6 это вряд ли было. Хотя могу проверить.

afgmoff для Симонова Дениса: из любой таблиц_е_
я бы вообще переписал выделенное так:
"При первом обращении к любой таблице мониторинга производится снимок активности сервера, записывается во все таблицы мониторинга, и сохраняется в них до конца текущей транзакции. Это сделано для возможности получения консистентной информации при выборке из нескольких взаимосвязанных таблиц мониторинга."

Последнее предложение можно поменять на
"Это сделано для того, чтобы запросы к множеству таблиц мониторинга (например, главная-подчинённая) всегда возвращал непротиворечивые данные."

как-то так.
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339690
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 2 ноября 2016 г. 11:17:03:

Kdv> чудится мне, что до какого-то момента timestamp в 1 диалекте не существовал.в 1.5 оно точно есть, а ставить IB6.0 лень.
хотя, можно же заглянуть в доку от IB6.0
но тоже, лень.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339808
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
Interbase 6.0 Data Defenition Guide

InterBase supports the following datatypes:

INTEGER and SMALLINT

FLOAT and DOUBLE PRECISION

NUMERIC and DECIMAL

DATE, TIME, and TIMESTAMP

CHARACTER and VARYING CHARACTER

BLOB
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339821
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sonkz!
You wrote on 2 ноября 2016 г. 12:38:50:

Sonkz> DATE, TIME, and TIMESTAMPнадо смотреть про различия 1 и 3 диалектов.
речь идёт о взаимозаменяемости DATE и TIMESTAMP в 1-м диалекте на уровне SQL.
(для движка оно понятное дело один хрен)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339842
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, специально ctrl-f весь pdf прошерстил. Похоже нету там различий на этот счет в 1 и 3 диалектах.
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339855
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
был ещё Migration Guide, по переходу с 1-го на 3-й диалект.
скорее всего там.
а может быть в Whats New...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339985
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://docwiki.embarcadero.com/InterBase/XE7/en/Method_One:_In-place_Migration

читаем пункт 5 - получается DATE и TIMESTAMP - В первом диалекте синонимы.
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39339990
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sonkz!
You wrote on 2 ноября 2016 г. 14:12:50:

SonkzВ первом диалекте синонимы.так то ж XE7.
а мы про 6.0
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39340015
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
а разве с диалектами что-то менялось? ЕМНИП - нет.
...
Рейтинг: 0 / 0
Подскажите по процедуре
    #39340018
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sonkz!
You wrote on 2 ноября 2016 г. 14:36:40:

Sonkz> а разве с диалектами что-то менялось? ЕМНИП - нет.за IB не скажу, а в FB от версии к версии таки да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите по процедуре
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]