"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

И это ещё не полный список извращений.

Ответить