"Хорсун Влад"

>     А что ты хотел этим сделать ? Добиться того, чтобы я запретил 
> COMMIT\ROLLBACK
> в EXECUTE STATEMENT ? Так я это сделаю ;)

Ну думаю не стоит, ибо COMMIT RETAIN есть )
Вообще, оптимизация соединения EXECUTE STATEMENT с внешними
датасорсами - это нужная вещь.
НАПРИМЕР:
  Выполнили RDB$SET_CONTEXT, а потом давай из VIEW запросы писать. Ну
а VIEW данные по контексту ограничивают.

----
Вышел на это случайно.
Прочитал в README.monitoring_tables.txt:
 DELETE FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID <>
CURRENT_CONNECTION

любопытство заставило задаться вопросом: "А что ели не указать
условие?"
И что?... ничего!

Тогда стал копать в сторону: "А как же тогда <<саммо-отключиться>>"
родилось нечто вида:

execute block as
declare variable DB_NAME TYPE OF COLUMN MON$ATTACHMENTS.MON
$ATTACHMENT_NAME;
begin
 SELECT A.MON$ATTACHMENT_NAME FROM MON$ATTACHMENTS A
   WHERE A.MON$ATTACHMENT_ID = CURRENT_CONNECTION
    INTO :DB_NAME;

  EXECUTE STATEMENT ('DELETE FROM MON$ATTACHMENTS WHERE MON
$ATTACHMENT_ID = :CONN') (CONN := CURRENT_CONNECTION)
  ON EXTERNAL 'localhost/3051:' || :DB_NAME
  --WITH AUTONOMOUS TRANSACTION
  AS USER 'SYSDBA' PASSWORD 'masterkey';
end



Ответить