"Alexandr Kochmin" ...
>
> и еще решил попробовать новый EB
> execute block
> returns (
>     id integer)
> as
> declare variable id1 integer;
> begin

  id = 0;

>   for select id from p1 into :id1 do
>     id=id+1;
>   suspend;
> end
>
> и тут хоть есть -- перед suspend хоть нету, но возвращаются записи.
> А я то хотел съэмулировать count

    Ни фига не возвращается

> Однако если убрать совсем suspend вместе с комментарием, то возвращается ID=1 
> и все!

    NULL у тебя должен вернуться

> вообще фигня какая-то с этим execute block или я чего-то не прочитал.

    Ышы фигню у себя ;)

> Но в RN вроде ничего не написано про такие особенности.

    Ибо их нет ;)

> ну и заодно, ibexpert не понимает execure block хотя я ему задал в 
> регистрационной информации, что сервер FB2
> но это уже не сюда да и к теме не относится.

    IBE понимает EB уже хрен знает сколько лет :)

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

PS
1.
SELECT COUNT(*) FROM ORDERS

COUNT = 1080000
FB 2.0.1 Execute time = 1s 142ms
FB 2.1.0 Execute time = 1s 221ms

2.
CREATE PROCEDURE P1
RETURNS (ID INT)
AS
BEGIN
  FOR SELECT O_ID FROM ORDERS INTO :ID
   DO SUSPEND;
END

SELECT COUNT(*) FROM P1

COUNT = 1080000
FB 2.0.1 Execute time = 4s 427ms
FB 2.1.0 Execute time = 3s 485ms

3.
EXECUTE BLOCK RETURNS (ID INT)
AS
DECLARE O_ID INT;
BEGIN
  ID = 0;
  FOR SELECT O_ID FROM ORDERS INTO :O_ID
   DO ID = ID + 1;

  SUSPEND;
END

ID = 1080000
FB 2.0.1 Execute time = 1s 973ms
FB 2.1.0 Execute time = 2s 273ms


Ответить