"PEAKTOP"
> Ты уточняй: твое поведение или сервера ?
Поведение сервера.
> З.Ы. а я думал, что таких извращенцев как я поискать надо. Ан нет, не
> перевелись еще на русской земле ... (чуть не написал "богатыри") :)
По поводу извращенцев. Выглядит это странно, а что делать?
Вот есть мониторинг в 2.5. Весь из себя красивый, но(!) не везде
удобный, потому как обусловлен особым поведением, аля снимок на момент
времени. Дима не раз объяснял, что как у борманов не хочет, потому как
таблички должны быть вкупе валидны друг с другом.
На этот случай появились автономки, как элемент-блок PSQL и как
элемент EXECUTE STATEMENT.
Вот пример получения объекта, нас вызвавшего:
CREATE OR ALTER PROCEDURE GET_CALLER_NAME
RETURNS (
OBJECT_NAME CHAR(31),
OBJECT_TYPE SMALLINT)
AS
DECLARE VARIABLE TRAN_ID INTEGER;
begin
TRAN_ID = CURRENT_TRANSACTION;
IN AUTONOMOUS TRANSACTION DO
BEGIN
select first 1 skip 1 CS.mon$object_name, CS.mon$object_type
from mon$call_stack CS, mon$statements ST where
CS.mon$statement_id = ST.mon$statement_id
AND ST.mon$transaction_id = :TRAN_ID
order by CS.mon$call_id ascending
into :OBJECT_NAME, :OBJECT_TYPE;
END
SUSPEND;
end
аналогично и себя так можно получить и т.п.
Ещё пример? Запросто!
Хочу PRINT для отладки, а вот не его... Можно через внешние таблички,
а вот неудобно.
Ну что ж, сделаем через автономки:
CREATE OR ALTER PROCEDURE PRINT(
PRINT_DATA VARCHAR(32000))
AS
begin
in autonomous transaction do
begin
insert into print_out(PRINT_DATA) values (:PRINT_DATA);
end
end
И это ещё не полный список извращений.