|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
Есть процедура TEST_PROC без suspend. Она делает select одной записи (последней записи в таблице). Возвращает поля ID,TEST Есть триггер CREATE trigger people_test for people active before insert position 2 as DECLARE VARIABLE ID INTEGER; DECLARE VARIABLE TEST VARCHAR(255); begin execute procedure (TEST_PROC) returning_values :ID, :TEST; end Как изменить триггер, чтобы после его выполнения выводился результат выполнения процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 13:55 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
Никак. Триггер выполняется на сервере и выводить что-либо куда-либо технически не может. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 13:58 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, Куда выводился? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 13:58 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, Руководство по языку SQL СУБД Firebird 2.5 6 сентября 2015 — v.0336-1 для Firebird 2.5.4Пример 7.22. Оповещёние приложения о вставке записи в таблицу SALES SETTERM ^; CREATE TRIGGERPOST_NEW_ORDER FORSALES ACTIVE AFTER INSERT POSITION0 AS BEGIN POST_EVENT 'new_order'; END^ SETTERM ;^ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 14:06 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
Последнее сообщение почти то что надо. Но хотелось бы чтобы процедуру, которая делает select,вызвать из триггера. И чтобы она, когда её вызовет триггер, в IBExpert показала последнюю запись (то есть только что вставленную). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 14:58 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, В триггере тебе никто не мешает вызвать хранимую процедуру. Ее результаты ты можешь записать в таблицу. А в ИБЭ - сделать select из этой таблицы и посмотреть, что тебе вернула хранимая процедура. Хотя в принципе ничто не мешает в том же ИБЭ сразу вызвать хранимку, без извратов с триггерами. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:14 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikleИ чтобы она, когда её вызовет триггер, в IBExpert показала последнюю запись (то есть только что вставленную). По-моему, ты совсем не понимаешь что такое триггер, когда и как он вызывается. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:20 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
А как мне её правильно вызвать, чтобы в IBExpert Она мне показала последнюю запись Я это и спрашиваю CREATE trigger people_test for people active before insert position 2 as DECLARE VARIABLE ID INTEGER; DECLARE VARIABLE TEST VARCHAR(255); begin execute procedure (TEST_PROC) returning_values :ID, :TEST; end ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:20 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikleА как мне её правильно вызвать, чтобы в IBExpert Она мне показала последнюю запись Я это и спрашиваю Кто она-то? Сам код этой TEST_PROC показать можешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:26 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
SET TERM ^ ; create or alter procedure NEW_NAME returns ( ID integer, NAME varchar(255)) as BEGIN FOR Select People.ID,People.NAME from people where People.ID =( Select max(People.ID) from people) INTO :ID, :NAME DO BEGIN END END^ SET TERM ; ^ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:42 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, она же TEST_PROC ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:42 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, тебе нужно а) учиться, учиться и учиться б) INSERT RETURNING ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:45 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikleПоследнее сообщение почти то что надо. Но хотелось бы чтобы процедуру, которая делает select,вызвать из триггера. И чтобы она, когда её вызовет триггер, в IBExpert показала последнюю запись (то есть только что вставленную). Код: sql 1. 2. 3.
не оно? И процедуры не надо ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 15:47 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 16:01 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
roadstersaikle, http://www.ibase.ru/devinfo/sp_call.htm эту статью я видел и если бы она помогла, то я бы не спросил ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 16:33 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, результат работы процедуры можно записать в поля записи внутри триггера (new.), а результат этих изменений - через insert returning. Но вся эта идея совершенно фиговая, потому что триггер сам по себе ничего не возвращает, никуда. Кроме того, приводят в уныние - "процедура делает select последней записи". Что такое "последней"? - зачем триггеру "последняя запись"? - какие "последние" записи увидят два одновременно сработавших триггера? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 16:38 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
kdvsaikle, результат работы процедуры можно записать в поля записи внутри триггера (new.), а результат этих изменений - через insert returning. Но вся эта идея совершенно фиговая, потому что триггер сам по себе ничего не возвращает, никуда. Кроме того, приводят в уныние - "процедура делает select последней записи". Что такое "последней"? - зачем триггеру "последняя запись"? - какие "последние" записи увидят два одновременно сработавших триггера? Процедура возваращает, а мы её вызываем. Учу триггеры и хп, просто нужно последняя запись та, у который максимальный ID ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 16:47 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikleпоследняя запись та, у который максимальный ID да ладно. Код: sql 1. 2.
при этом MAX(ID) может вернуть 10000000 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 16:58 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
Пусть будет не последняя запись. Просто та запись, у которой максимальный ID Я хочу просто вызвать из триггера хп, чтобы он мне вывел такое же сообщение, что и просто написать execute procedure ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 17:00 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, какое ещё на фиг сообщение? БД вообще-то с помощью SQL запросов общается с приложением, а не сообщений. Есть конечно ещё POST_EVENT, но он сделан совершенно не для того чтобы выводить информацию. Чем тебе обычный RETURNING не подходит? И не надо никакой процедуры внутри триггера городить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 17:04 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
Симонов Денисsaikle, какое ещё на фиг сообщение? БД вообще-то с помощью SQL запросов общается с приложением, а не сообщений. Есть конечно ещё POST_EVENT, но он сделан совершенно не для того чтобы выводить информацию. Чем тебе обычный RETURNING не подходит? И не надо никакой процедуры внутри триггера городить. запрос, я не правильно выразился. Но можно меня понять. Я написал. Что триггер должен сделать то же самое, что если просто вызвать процедуру через execute procedure. Но только, как это написать в триггере? Нет, мне бы процедурой. Но другие способы тоже интересны ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 17:19 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, Так что ли? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 17:22 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
DarkMastersaikle, Так что ли? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Да. Только почему то триггер создаётся. Но после вставки не делает то же самое, что делает просто execute procedure TEST_PROC ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 17:33 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikle, В Firebird все DML триггеры FOR EACH ROW. Поэтому они автоматически содержат текущую запись через NEW/OLD. Если у тебя ID - это автоинкремент устанавливаемый BEFORE триггером с помощью генератора, то в AFTER INSERT триггере ты и так имеешь последнюю добавленную запись. А потом ты можешь в этом засунуть эту запись например в другую табличку. Ну а получить эту запись, например, вызвав SELECT из этой таблички. Про триггер. Он ничего и никуда возвращать не может. Ибо триггер ты никак не вызовешь напрямую. Триггер - это обработчик DML события. Нету у него ни входных, ни выходных параметров. INSERT ... RETURNING сразу вернёт тебе только что вставленную запись с учётом всех изменений сделанных BEFORE триггером. AFTER триггер не надо. Процедуру свою можешь вообще выкинуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 17:40 |
|
Re: Как связать две таблицы по одинаковым полям
|
|||
---|---|---|---|
#18+
saikleПроцедура возваращает, а мы её вызываем. триггер-то не возвращает. Например, пишем триггер с позицией 1000, меняющий ваши столбцы. И все, тю-тю результатам процедуры. saikleПросто та запись, у которой максимальный ID в РСУБД так не делают. В общем случае MAX() не применяют вот в таких ситуациях. В других - сколько угодно. saikleЧто триггер должен сделать то же самое, что если просто вызвать процедуру через execute procedure. никак это не написать в триггере. уже двадцать раз сказали, что триггер только может поменять столбцы. Куда-то там вернуть он ничего не в состоянии. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 17:42 |
|
|
start [/forum/topic.php?fid=40&msg=39066263&tid=1562614]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 157ms |
0 / 0 |