Привет всем! :)

Почему бы не ввести специальную конструкцию, для вызова из блока самого
себя?
Например RDB$SELF или RDB$THIS

Пример удаления ветки из дерева:
CREATE TABLE SYMPTOMS
(
  ID D_ID,
  PARENT_ID D_ID,
  CONSTRAINT PK_SYMPTOMS PRIMARY KEY (ID),
  CONSTRAINT FK_SYMPTOMS_PARENT_ID FOREIGN KEY (SYM_ID) REFERENCES
SYMPTOMS (ID)
);

execute block(ID: D_ID) returnung (CNT: integer)
as
declare variable CID D_ID;
begin
  CNT = 0
  for select ID from SYMPTOMS where PARENT_ID = :ID into :CID do
    CNT = CNT + RDB$SELF(:ID);
  delete from SYMPTOMS where ID = :ID;
end

-- 
Александр Замараев

Ответить