Запуск долгой SP
ODBC
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Запуск долгой SP
Если я не ошибаюсь триггер на инсерт работает с таблицей INSERTED, в которой к моменту работы триггера уже скопились все вставляемые командой записи, так что поштучно с записями работать не выйдет.
А целевая таблица пополняется или каждый раз новая? Я почему спрашиваю, INSERT INTO влет работает, даже ждать не надо.
А целевая таблица пополняется или каждый раз новая? Я почему спрашиваю, INSERT INTO влет работает, даже ждать не надо.
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
Aragorn
-
- ✯ Ветеран ✯
- Сообщения: 5183
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Запуск долгой SP
Я имел ввиду вот что.
Добавляем записи в Таблицу1. А в Таблице2 (типа временная) создаём до процесса добавления запись, допустим из двух полей Current=0, Total=сумма записей, которые надо добавить.
В триггере по Insert пишем такой запрос:
update Таблица2
set Current = Current + 1
Всё. Можно читать Таблицу2 и сравнивать Current с Total.
Добавляем записи в Таблицу1. А в Таблице2 (типа временная) создаём до процесса добавления запись, допустим из двух полей Current=0, Total=сумма записей, которые надо добавить.
В триггере по Insert пишем такой запрос:
update Таблица2
set Current = Current + 1
Всё. Можно читать Таблицу2 и сравнивать Current с Total.
We are hard at work… for you. 

kreator
Запуск долгой SP
Я же говорю, триггер оперирует СРАЗУ ВСЕМИ вставляемыми в операторе insert записями, которые содержатся в таблице INSERTED, так что set Current = Current + 1 скорее всего сработает всего один раз... По крайней мере в MSSQL точно. И потом, клиент не замучит сервер долбясь к Таблице 2 считывая значения полей?В триггере по Insert пишем такой запрос:
update Таблица2
set Current = Current + 1
Всё. Можно читать Таблицу2 и сравнивать Current с Total.
Я не знаю, правильно это или нет, но мне кажется лучше, если клиентское приложение не дергает сервак по всяким пустякам. А то бывает запустишь Profiler и тихо обалдеваешь...
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
Aragorn
-
- ✯ Ветеран ✯
- Сообщения: 5183
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Запуск долгой SP
Сомневаюсь. Но у нас похожего примера нет, пусть ingasoftplus проверит.Aragorn писал(а):Я же говорю, триггер оперирует СРАЗУ ВСЕМИ вставляемыми в операторе insert записями, которые содержатся в таблице INSERTED, так что set Current = Current + 1 скорее всего сработает всего один раз...
We are hard at work… for you. 

kreator
Запуск долгой SP
Верно, все нужно проверять на деле
Я же могу только добавить, что мои утверждения касаются как минимум MSSQL, где триггер INSERT полностью зовется INSTEAD OF INSERT, и предназначен для замены стандартного добавления записей.

Я же могу только добавить, что мои утверждения касаются как минимум MSSQL, где триггер INSERT полностью зовется INSTEAD OF INSERT, и предназначен для замены стандартного добавления записей.
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
Aragorn
Запуск долгой SP
Говорить тут не о чем -- триггер действительно отработает только один раз. Так что триггер здесь не подойдет.ingasoftplus писал(а):Код: Выделить всё
INSERT from (select from table)
А вот что действительно можно использовать, так это системную информацию о процессе (MS SQL 2005+):
Код: Выделить всё
select p.spid,p.hostname,r.command,t.[text],p.cpu,r.reads,r.writes,r.logical_reads
from sys.sysprocesses p with (nolock)
join sys.dm_exec_requests r with(nolock) on r.session_id = p.spid
outer apply sys.dm_exec_sql_text(r.plan_handle) t
where 1=1
and (p.cmd<>'AWAITING COMMAND' or p.status='DORMANT')
and p.spid = @@spid
Последний раз редактировалось Shur 23 Апрель 2015, 14:48, всего редактировалось 1 раз.
Shur
- ingasoftplus
- Ветеран
- Сообщения: 467
- Зарегистрирован: 26 Декабрь 2006, 17:07
- Откуда: Оттуда :)
- Благодарил (а): 125 раз
- Поблагодарили: 7 раз
Запуск долгой SP
все это чудестно!!!! если б не одно но. В процедуре моей только один инсерт:
и когда ее запускаешь - хоть тресни, пока она не отработает ты ничего из клары не узнаешь!! даже если запостить выходные параметры, они будут доступны только по окончанию работы!!
Сегодня проверил,
filename{prop:sql} = 'CALL my_SP' - уже запускает процедуру и все виснет и ждет ее завершения, и уже потом
next (filename) может что-то получить....
так что ничего не могу придумать путного. пусть юзер ждет
Код: Выделить всё
INSERT INTO table1
( filed1, … )
(SELECT
filed1, …
FROM table2 )
Сегодня проверил,
filename{prop:sql} = 'CALL my_SP' - уже запускает процедуру и все виснет и ждет ее завершения, и уже потом
next (filename) может что-то получить....
так что ничего не могу придумать путного. пусть юзер ждет

ingasoftplus
Shur
- ingasoftplus
- Ветеран
- Сообщения: 467
- Зарегистрирован: 26 Декабрь 2006, 17:07
- Откуда: Оттуда :)
- Благодарил (а): 125 раз
- Поблагодарили: 7 раз
Запуск долгой SP
сложно сказать... слишком много телодвижений и сложно получается. неужели никто конкретно не сталкивался??? опять велосипед?
ingasoftplus
- Дед Пахом
- Старичок
- Сообщения: 3302
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 51 раз
- Контактная информация:
Запуск долгой SP
что там сложного? Делаешь отдельную source-процедуру (можно даже локальную), пишешь в ней вызов хранимки, из формы её STARTушеь, как SP отработала, шлёшь в вызывающий тред Event:Notify, а в форме в это время кино крутишь.
С уважением, ДП
Дед Пахом
- ingasoftplus
- Ветеран
- Сообщения: 467
- Зарегистрирован: 26 Декабрь 2006, 17:07
- Откуда: Оттуда :)
- Благодарил (а): 125 раз
- Поблагодарили: 7 раз
ingasoftplus
Запуск долгой SP
Все оказалось до противного просто 
про старт совсем забыл )

про старт совсем забыл )
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
Aragorn
Вернуться в «SQL, Oracle, ...»
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)