powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не компиляется процедура
13 сообщений из 13, страница 1 из 1
Не компиляется процедура
    #39263162
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики, я тут осваиваю новое для меня - написание процедур. Решил потренироваться на древовидной табличке (благо, она заполненная реальными данными)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE TBL_MKB10 (
    ID          INTEGER NOT NULL,
    PARENT_ID   INTEGER,
    MKB_VALUES  VARCHAR(300)
);

ALTER TABLE TBL_MKB10 ADD CONSTRAINT PK_MKB10 PRIMARY KEY (ID);
CREATE INDEX PARENT_IDX ON TBL_MKB10 (PARENT_ID);


наваял при образцу из Диминой статьи процедуру
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR ALTER PROCEDURE GET_PARENT (
    ID TYPE OF COLUMN TBL_MKB10.ID)
RETURNS (
    PATH TYPE OF COLUMN TBL_MKB10.MKB_VALUES,
    PARENT_ID TYPE OF COLUMN TBL_MKB10.PARENT_ID)
AS
BEGIN
  WHILE (:ID > 0) DO
  BEGIN
    FOR SELECT M.PARENT_ID, M.MKB_VALUES
        FROM TBL_MKB10 M
        WHERE M.ID = :ID
        INTO :PARENT_ID, :PATH; --вероятно, затык тут
        ID = :PARENT_ID;
        SUSPEND;
      END
END


Получаю отлуп
Код: sql
1.
2.
3.
4.
5.
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 13, column 31.
;.



Что не так?


=================
Док.

Win7 Ultim x64/Deb 7.6 i386 (Deb 8.3 i386):
FB 3.0.0.32483, диалект 3, SS(win)/CS(Deb),
Lazarus 1.7; FPC 3.1.1, IBX by -Rik-; IBE 2016.4.29.1
IBE 2016.5.14.1
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263167
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точку с запятой убирай, тело цикла заворачивай в BEGIN..END
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263171
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR ALTER PROCEDURE GET_PARENT (
    ID TYPE OF COLUMN TBL_MKB10.ID = ?ID)
RETURNS (
    PATH TYPE OF COLUMN TBL_MKB10.MKB_VALUES,
    PARENT_ID TYPE OF COLUMN TBL_MKB10.PARENT_ID)
AS
BEGIN
  WHILE( (:ID > 0) AND (:ID IS NOT NULL) )DO
  BEGIN
    FOR 
      SELECT M.PARENT_ID, M.MKB_VALUES
      FROM   TBL_MKB10 M
      WHERE (M.ID = :ID)
      INTO   :PARENT_ID, :PATH
    DO
      BEGIN
      ID = :PARENT_ID;
      SUSPEND;
      END
  END
END



вопрос, просто пространный.

ты в "деревянной" таблице хочешь получить по коду элемента список родителей от рута?
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263271
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

for select ... do begin end. В исходной статье нет for select в том "блоке", зато есть begin end.
так что, https://www.ibase.ru/sp_call/
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263302
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, точно. В for select конструкции do потерял :)

Спасибо, пошел грызть гранит дальше...
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263306
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOP

вопрос, просто пространный.

ты в "деревянной" таблице хочешь получить по коду элемента список родителей от рута?
В перспективе, да. Только хочу "допетрить" логику самостоятельно, а не пользоваться готовыми шаблонами. Так проще освоиться
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263313
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

если это только для обучения, то нормально. Иначе я бы советовал запрос WITH RECURSIVE
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263361
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док, будь проще.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR ALTER PROCEDURE GET_PARENT
  (
    ID TYPE OF COLUMN TBL_MKB10.ID
  )
  RETURNS
  (
    PATH TYPE OF COLUMN TBL_MKB10.MKB_VALUES,
    PARENT_ID TYPE OF COLUMN TBL_MKB10.PARENT_ID
  )
AS
BEGIN
  PARENT_ID = ID;
  WHILE (:PARENT_ID > 0) DO
    BEGIN
      SELECT M.PARENT_ID, M.MKB_VALUES
        FROM TBL_MKB10 M
        WHERE M.ID = :PARENT_ID
        INTO: PARENT_ID, PATH;
      SUSPEND;
    END
END
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263433
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, rdb_dev
погодите, я сам должен до этого дорасти. Спасибо за подсказки :)
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39263621
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док, тебе вдогонку пример дерева с каскадным удалением: 19282315
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39265593
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ходу пьесы возникли еще вопросы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR ALTER PROCEDURE CREATE_DOCSETTINGS_NEW_USER (
    NAME TYPE OF COLUMN RDB$DOCSETTINGS.NAME,
    NOTE TYPE OF COLUMN RDB$DOCSETTINGS.NOTE)
AS
DECLARE VARIABLE ROOT_ID INTEGER;
DECLARE FUNCTION GET_DOCSETTINGS_NEW_ID 
RETURNS INTEGER 
AS 
BEGIN 
   RETURN GEN_ID(GEN_RDB$DOCSETTINGS_ID, 1);
END

BEGIN
  ROOT_ID = GET_DOCSETTINGS_NEW_ID; -- получаем корневой ID
--<skiped>
END;


получаю
Код: sql
1.
2.
3.
4.
5.
6.
7.
Column does not belong to referenced table.
unsuccessful metadata update.
CREATE OR ALTER PROCEDURE CREATE_DOCSETTINGS_NEW_USER failed.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
GET_DOCSETTINGS_NEW_ID.


ЧЯДНТ?
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39265606
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док, скобки после вызова функций надо ставить

Код: sql
1.
2.
3.
4.
5.
--<skiped>
BEGIN
  ROOT_ID = GET_DOCSETTINGS_NEW_ID(); -- получаем корневой ID
--<skiped>
END;
...
Рейтинг: 0 / 0
Не компиляется процедура
    #39265610
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

спасибо, "не догадался" :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не компиляется процедура
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]